Вы, возможно, должны были бы разъясниться немного. Что Вы действительно пытаетесь выполнить? Если Вы действительно хотите узнать имена столбцов, которые только содержат нулевые значения, то необходимо будет циклично выполниться через scheama и сделать динамический запрос на основе этого.
я не знаю, какой DBMS Вы используете, таким образом, я помещу некоторый псевдокод здесь.
for each col
begin
@cmd = 'if not exists (select * from tablename where ' + col + ' is not null begin print ' + col + ' end'
exec(@cmd)
end
Если вы не вызываете app.exec (), программа достигает конца вашего main () и завершается. (Почему? Больше нет кода для выполнения!)
app.exec () - это бесконечный цикл следующего стиля:
do
{
get event from system
handle event
}
while (true);
Если вы используете соединение с очередью, то событие добавляется в вашу очередь событий, и оно будет выполняться в какой-то момент в будущем во время цикла app.exec ().
В вашей программе нет второго потока. События доставляются ОС асинхронно, поэтому кажется, что происходит что-то еще. Есть, но нет в вашей программе.
Когда вы говорите, что он входит в бесконечный цикл, вы имеете в виду, что это приводит к сбою программы?
Потому что listen () станет частью основного цикла обработки событий приложения в том виде, в котором вы его настроили, и который выполняется до выхода из программы. Я не уверен, в чем проблема. Не должно возникнуть проблем, если ваш сигнал будет испускаться в основном цикле событий приложения (exec ()) всякий раз, когда он встречается.
Если хотите,
app.exec ()
входит в основной цикл обработки событий и ждет, пока вызывается exit ()
.
update:
Основной цикл событий и связующий код, сгенерированный qmake, заботятся о передаче сообщения о событии с QTcpServer
на ваш ] ConnectionHandler
.
Если вы будете использовать соединения с очередями, фактическое соединение со слотом QTcpServers
будет отложено до тех пор, пока основной цикл обработки событий не доставит запрос соединения .