Просмотр сообщений
|
Страниц: 1 ... 46 47 [48] 49 50
|
706
|
Qt / Пользовательский интерфейс (GUI) / QAction и вызов слота с параметром. Как сделать?
|
: Август 24, 2008, 22:25
|
Здравствуйте! Мне нужно сделать таку вещь - создать контекстное меню (на виджете QListView) и вызывать один и тот же слот с разными параметрами. Ну то есть хотелось бы вместо создания отдельного слота на каждый пункт меню, иметь "общие" слоты, которые вызываются с параметром. Ниже дан код (нерабочий), и хотелось бы понять, как сделать его рабочим. // Обычное добавление записи в конец списка a = new QAction(tr("Add new"), this); connect(a, SIGNAL(triggered()), this,SLOT(recordview_add_new_context(ADD_NEW_RECORD_TO_END))); menu.addAction(a);
// Добавление записи до a = new QAction(tr("Add new before"), this); if((!recordview->selectionModel()->hasSelection()) || (recordview->selectionModel()->selectedRows()).size()!=1 ) a->setEnabled(false); // Пункт активен только если выбрана одна строка списка connect(a, SIGNAL(triggered()), this,SLOT(recordview_add_new_context(ADD_NEW_RECORD_BEFORE))); menu.addAction(a);
|
|
|
707
|
Qt / Общие вопросы / Re: Тормозит иерархическая модель построенная на QAbstractItemModel
|
: Август 21, 2008, 22:40
|
Так у меня так и делается но так надо потом (после удаления) сообщить об этом представлению (TreeView в данном случае) перерисоваться если вызывать reset то это слишком наклодно, поэтому я вызываю emit dataChanged ток не знаю индексы какие? Я так понял, что вместо сигналов при добавлении/удалении лучше пользоваться конструкциями beginInsertRows(), endInsertRows() и т.д. Вот пример - у меня внутреннее представление списка, унаследованного от QAbstractListModel, лежит в списке QList<QString> table. Когда я добавляю в конец списка новую запись, я делаю таг // Начинаются добавляться данные beginInsertRows(QModelIndex(), table.size(), table.size() + 1);
// Новая запись размещается в списке table << tmpline;
// Добавление данных закончено, далее вид должен сам знает что надо // обновить на экране чтоб была видно новая строка endInsertRows(); А когда удаляю запись, делаю таг (i - 'это номер записи которую надо удалить) // Начинается удаление записи beginRemoveRows(QModelIndex(),i,i);
// Удаляется элемент table.takeAt(i);
// Удаление записи закончено endRemoveRows(); То есть идея такая - указываем какая область меняется, потом эти области будут автоматом перерисованы видом. Так как это будет происходить с вызовом метода data(), который в моем случае из внутреннего представления (из списка table) возвращает запрошенный элемент, то вид как раз и обновится в соответсвии с изменениями, вносимыми в внутренне представление даннх.
|
|
|
708
|
Qt / Общие вопросы / Re: Где можно заработать используя QT
|
: Август 21, 2008, 22:01
|
PS: я используя QT получал где-то около 700% около года назад, щас малость его забросил - ибо больше нравится консольные проги делать под Linux. Кто ваш заказчик? Ну не обязательно говорить конкретно контору, но всеже хотелось бы узнать, кому ныне нужны консольные проги под Linux, и где такие заказчики водятся? А реально ли с такими заказчиками удаленно работать?
|
|
|
710
|
Qt / XML / Не могу сделать простую вещь - добавить подэлемент в дерево.
|
: Август 16, 2008, 23:59
|
Здравствуйте! Вторые сутки бъюсь на простой проблемой. Кратко задача такая. Есть QDomElement, содержащий некоторое DOM дерево. Надо - добавить в него один элемент (на первый уровень вложения), приклеить получившийся элемент к пустому документу, и сохранить документ в файл. Вот болванка, дальше мы бодем изменять в ней один блок кода // Коструирование DOM документа для записи в файл QDomDocument doc;
// Установка заголовка doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""));
// Получение DOM дерева хранимых данных (это моя функция, рабочая) QDomElement elm=nodemodel->export_fullmodeldata_to_dom(nodemodel->rootItem);
// Добавление формата версии к элементу хранящему DOM дерево хранимых данных QDomElement formvers=doc.createElement("format"); formvers.setAttribute("version",CURRENT_FORMAT_VERSION); formvers.setAttribute("subversion",CURRENT_FORMAT_SUBVERSION); elm.appendChild(formvers.cloneNode());
// Добавление дерева DOM хранимых данных к документу doc.appendChild(elm);
qDebug() << "Doc document for write " << doc.toString();
// Запись DOM данных в файл QString filename="temp.xml"; QFile wfile(filename); if (!wfile.open(QIODevice::WriteOnly | QIODevice::Text)){qDebug() << "Cant open file ";exit(1);} QTextStream out(&wfile); out.setCodec("UTF-8"); out << doc.toString(); В результате мы имеем Doc document for write "<?xml version="1.0" encoding="UTF-8"?> <content> </node> <record dir="0000000100" id="49" name="Тушканчик" file="text.txt" /> </node> <format version="1" subversion="1" /> </content> " *** glibc detected *** ./mytetra: corrupted double-linked list: 0x087e6aa8 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6[0xb73d8b2a] /lib/tls/i686/cmov/libc.so.6[0xb73dae38] /lib/tls/i686/cmov/libc.so.6[0xb73dbef5] /lib/tls/i686/cmov/libc.so.6(realloc+0xfe)[0xb73de08e] /usr/lib/libQtCore.so.4(_Z8qReallocPvj+0x24)[0xb7621c38] /usr/lib/libQtCore.so.4(_ZN9QListData7reallocEi+0x68)[0xb7647bc0] /usr/lib/libQtCore.so.4(_ZN9QListData6appendERKS_+0xc1)[0xb7647e6f] /usr/lib/libQtGui.so.4[0xb78a7c5c] /usr/lib/libQtGui.so.4(_ZN12QApplication10allWidgetsEv+0x98)[0xb789ed68] /usr/lib/libQtGui.so.4(_ZN12QApplication15topLevelWidgetsEv+0x28)[0xb789eda6] /usr/lib/libQtGui.so.4(_ZN19QApplicationPrivate26_q_tryEmitLastWindowClosedEv+0x26)[0xb789ee8c] /usr/lib/libQtGui.so.4(_ZN12QApplication11qt_metacallEN11QMetaObject4CallEiPPv+0x114)[0xb78a145e] /usr/lib/libQtCore.so.4(_ZN14QMetaCallEvent13placeMetaCallEP7QObject+0x34)[0xb76ed588] /usr/lib/libQtCore.so.4(_ZN7QObject5eventEP6QEvent+0x13f)[0xb76f28ef] /usr/lib/libQtCore.so.4(_ZN16QCoreApplication5eventEP6QEvent+0x47)[0xb76df84b] Aborted (core dumped)4(_Z Если закомментировать код // Добавление формата версии к элементу хранящему DOM дерево хранимых данных QDomElement formvers=doc.createElement("format"); formvers.setAttribute("version",CURRENT_FORMAT_VERSION); formvers.setAttribute("subversion",CURRENT_FORMAT_SUBVERSION); elm.appendChild(formvers.cloneNode()); То ошибки не возникает. Логично предполагаю, что проблема в этом куске кода, что-то там добавляется некорректно. Начинаю экспериментировать. Пробую так // Добавление формата версии к элементу хранящему DOM дерево хранимых данных QDomElement formvers=another.createElement("format"); // Элемент на основе временного документа formvers.setAttribute("version",CURRENT_FORMAT_VERSION); formvers.setAttribute("subversion",CURRENT_FORMAT_SUBVERSION); elm.appendChild(formvers.cloneNode()); Ошибки нет, но узел <format version="1" subversion="1" /> не появляется. Пробовал еще по-разному. Результат один и тот же - ошибки нет, но узла <format version="1" subversion="1" /> тоже нет. Вот еще как пробовал // Добавление формата версии к элементу хранящему DOM дерево хранимых данных QDomElement formvers; formvers.setTagName("format"); formvers.setAttribute("version",CURRENT_FORMAT_VERSION); formvers.setAttribute("subversion",CURRENT_FORMAT_SUBVERSION); elm.appendChild(formvers.cloneNode()); И еще пробовал варианты кода без cloneNode() в последней строке. Ничего не помогает - ошибки нет, но и узла <format version="1" subversion="1" /> тоже нет. Я уже не знаю что делать. На просторах интернета ничего внятного не нашел. Кроме того, что подобная ошибка происходит в режиме компиляции C++ (не в чистом C). На русских ресурсах такую ошибку видел только один человек. У боржуев - ошибка популярна, возникает в GTK+, в каких-то HTML-парсерах, в Qt. Но с моим знанием англицкого понять что к чему весьма трудно. Вопрос - что делать то? Задачка ведь простая, но такие сложности выше моего понимания. Кто что может сказать, возможно у когото есть подобный опыт.
|
|
|
711
|
Qt / XML / Re: XML. Три вопроса. (Решено)
|
: Август 15, 2008, 20:53
|
Ну как бы в описании метода toString() не указывается, что для преобразования в строку документа, DOM-представление обязательно должно быть валидным. Кусок из русской доки, арфаграфия аффтарская QString QDomDocument::toString ( int indent = 1 ) const
Переводет анализируемый документ обратно в его текстовое представление. Эта фукнция использует indent для определения объема пространства отступа для подэлементов. Меня больше беспокоит другое. 1. Что же действительно присходит при выполнении кода вида QDomDocument doc; QDomElement elm = doc.createElement("element"); ? Почему на документ doc происходит влияние через createElement(), и он уже не является null node, хотя все так же ничего не содержит? Почему у троллей в документации вышеприведенный код повторяется как мантра? Потому что они знают об этой особенности. Но по неизвестным причинам не описывают подробностей. 2. В связи с вышенаписанным, не получится ли так, что в новой подверсии Qt такое поведение будет изменено? Например, doc.createElement("element") перестанет влиять на документ doc, и doc будет оставаться в виде null node? И тогда весь код, который был написан со знанием этой особенности станет невалидным?
|
|
|
712
|
Qt / XML / Re: XML. Три вопроса.
|
: Август 15, 2008, 18:14
|
если спросил, _слушай_ ответ, а? итак, ещё раз: 1., 2. QDomDocument doc; QDomElement elm=doc.createElement("content"); // - "оторванная" ветка doc.appendChild(elm); // - нормальная ветка qDebug() << "New element " << xmlnode_to_string(elm); Хмм... Что в ^^^этом куске кода является _ответом_? В любом случае, проблема оказалась не в "оторваных" и "нормальных" ветках. А в особенности инициализации документа. Оказывается, документ, который создается командой типа QDomDocument tempdoc, является при создании пустым, и к нему невозможно прикрепить ни "оторванную", ни "нормальную" ветку. Чтобы ветка прикреплялась, документ должен быть ненулевой. Либо документ может быть нулевым, но прикрепляемая ветка должна быть создана через метод createElement() именно этого же документа. Пояснения на примере // Так НЕ работает qDebug() << "\n It is NOT work"; QDomDocument doca1; QDomElement elma=doca1.createElement("content"); // Создаем элемент QDomDocument doca2; // doca2.appendChild(elma); // Прикрепляем элемент к ПУСТОМУ документу qDebug() << "Document a2 " << doca2.toString();
// Так работает qDebug() << "\n It is work"; QDomDocument docb1; QDomElement elmb=docb1.createElement("content"); // Создаем элемент QDomDocument docb2("debugdoc"); docb2.appendChild(elmb); // Прикрепляем элемент к НЕПУСТОМУ документу (т.к. при создании был передан DOCTYPE "debugdoc") qDebug() << "Document b2 " << docb2.toString();
// Так работает qDebug() << "\n It is work"; QDomDocument docc; QDomElement elmc=docc.createElement("content"); // Создаем элемент docc.appendChild(elmc); // Прикрепляем элемент к ПУСТОМУ документу, но элемент был создан через createElement() данного документа qDebug() << "Document c " << docc.toString(); Результат выполнения этого кода такой It is NOT work Calling appendChild() on a null node does nothing. Document a2 ""
It is work Document b2 "<!DOCTYPE debugdoc> <content/>"
It is work Document c "<content/>" Подумав и поэкспериментировав еще немного, начинаешь понимать, что третий вариант кода трактуется выше по тексту неправильно. Не обязательно " прикрепляемая ветка должна быть создана через метод createElement() именно этого же документа". Происходит кое-что другое. А происходит вот что - при вызове метода createElement(), несмотря на то, что создаваемый элемент является "оторванным" и существует "сам по себе", документ, у которого был вызван createElement(), перестает быть нулевым. Проверим это на примере // Так работает qDebug() << "\n It is work"; QDomDocument doc1; QDomElement elm1=doc1.createElement("content"); // Создаем элемент QDomDocument doc2; // QDomElement elm2=doc2.createElement("stub"); // Создаем элемент-вспомогалку, который является "оторванным", но создание которого повлияло на doc2 и сделало doc2 НЕПУСТЫМ doc2.appendChild(elm1); // Прикрепляем элемент к ТИПА_ПУСТОМУ документу qDebug() << "Document " << doc2.toString(); Результат выполнения этого кода It is work Document "<content/>" Собирая все в кучу, понимаем как можно сделать дебаговый вывод (любого "оторванного" или там "неоторванного") элемента. Вначале у нас была функция, которая тупо не выводила содержимого узлов. Не потому что узлы были "оторваны" или "неоторваны", а просто - она не выводила содержимого узлов вообще. Как теперь выясняется, проблемы была в том, что документ tempdoc нуливой, и к нему ветка прицепиться не может. Напоминаю код QString xmlnode_to_string(QDomNode xmldata) { QDomDocument tempdoc;
if(!xmldata.isNull()) { tempdoc.appendChild(xmldata.cloneNode()); return tempdoc.toString(); } else return ""; } Какую бы ветку в эту функцию не скармливай, результат будет такой Calling appendChild() on a null node does nothing. "" Попробуем модифицировать эту функцию, и просто заменим строку QDomDocument tempdoc; на QDomDocument tempdoc("debugdoc");. В результате, какую бы ветку мы не передали, "оторванную" или "неоторванную", ее содержимое мы увидем, но не в совсем нужной для нас форме. Код QDomElement elm=doc.createElement("content"); // - "оторванная" ветка qDebug() << "New element " << xmlnode_to_string(elm); Покажет вот что New element "<!DOCTYPE debugdoc> <content/>" Узел <!DOCTYPE debugdoc> явно мешает. Тогда приводим функцию вот к такому виду QString xmlnode_to_string(QDomNode xmldata) { QDomDocument tempdoc;
// Создаем элемент-вспомогалку, который нигде не используется, но создание которого // влияет на tempdoc, делая этот докумен ненулевым QDomElement tempelm=tempdoc.createElement("stub");
if(!xmldata.isNull()) { tempdoc.appendChild(xmldata.cloneNode()); return tempdoc.toString(); } else return ""; } И такая функция при вызове кода QDomElement elm=doc.createElement("content"); // - "оторванная" ветка qDebug() << "New element " << xmlnode_to_string(elm); Покажет то что нужно 3. createProcessingInstruction создаёт не документ, а ветку! как и в 1-2 - если ты не прикрепил ветку к документу, ветки нет - она оторвана, а оторванные ветки не имеют отношения к документу, а посему невалидны. а раз невалидны, то и не дебажатся Как видно, дебажатся. 4. приведи ссылку на хорошие доки по хмл в том же ас или вб. если без примерчика 2 + 2 = 4 в голове ничего не проясняется, не лезь в плюсы Ссылка http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/, ознакомьтесь краем глаза. А вообще хорошие доки по XML в составе документации на язык программирования или библиотеку ненужны. Ненадо путать понятия. В документации на язык программирования или библиотеку должны быть хорошо задокументированы функции работы с XML. А это в Qt доке сделано недостаточно полно. Заметте, про ms ни слова. И не пугайте неофитов плюсами, мне то пофигу, а есть такие люди которые отвернутся от плюсов и Qt только потому, что им Константин посоветовал не лезть.
|
|
|
713
|
Qt / XML / Re: XML. Три вопроса.
|
: Август 15, 2008, 14:23
|
через toString ты получаешь документ обработанный хмл процессором т.е. результат: QString xmlstr = "<?xml version=\"1.0\"?><!DOCTYPE letter [<!ENTITY title \"title text\">]>\ <letter>&title;</letter>"; QDomDocument doc; doc.setContent(xmlstr, true); qDebug() << doc.toString();
выведет: <?xml version='1.0'?> <!DOCTYPE letter> <letter>title text</letter>
Спасибо, конечно.. А как это относится к вопросам выше?
|
|
|
714
|
Qt / XML / Re: XML. Три вопроса.
|
: Август 15, 2008, 13:14
|
1. дом всегда зависит от спецификации документа - "оторванные" ветки _нельзя_ дэбажить - читай документацию То есть, настоящие гуру XML-ветки не дебажат, потому что нельзя? Ну так в приведеном примере, "оторваная" ветка прикрепляется с глубоким копированием к документу. Документ вроде как можно дебажить через метод toString(). Почему документ получается пустой? Что сделать чтоб в документе появлялась прикрепляемая к нему ветка?1.1. в qt работа с дом реализована _очень_ близко к требованиям спецификации хмл дом - читай спецификацию хмл дом 2. doc.appendChild(elm) - читай документацию Вот я читаю документацию, и нихрена не понимаю, что присходит при выполнении кода QDomElement elm=doc.createElement("content");По идее, должен создаться XML-элемент с именем content. Я его (а точнее его копию, ибо передача по значению) скармливаю в дебажную функцию xmlnode_to_string(), в ней переданый элемент прикрепляется к временному документу (причем с глубоким копированием). И содержимое этого временного документа выводится на экран. Однако, вопреки ожиданию увидеть "<content/>", вижу пустую строку. В каком месте рассуждений ошибка? Да, делать doc.appendChild(elm) мне не нужно. Я хочу только понять, как дебажить/клеить элементы/ноды, пускай и "оторванные". Это нужно понять, само собой, не только для дебага. 3. doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"")) - читай документацию Угу, вместо doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");надо было писать doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""))Тока как-то неестественно запихивать документ в документ. Ведь XML-документ состоит из XML-элементов, а не из XML-документов. читай документацию Мда, троллям еще над документацией надо работать и работать. Сейчас она больше похожа на линуховые маны, в которых минимальными словами описаны опции и больше ничего. До уровня доков Adobe по ActionScript, или там доков Microsoft по VisualBasic, или даже до доки в досовом Борланд C, в которых практически на каждую функцию сделан пример, дока Qt не дотягивает. Хорошо хоть в начале разделов дают небольшие примеры, без них бы Qt был вообще неизучаем. А без примеров в две-три строки на каждую описываемую функцию, пионерам сложно.
|
|
|
715
|
Qt / XML / XML. Три вопроса. (Решено)
|
: Август 14, 2008, 22:49
|
Здравствуйте! Пытаюсь генерить через Qt (DOM модель) XML-файлы, и есть несколько вопросов. Я с XML только во флшевом ActionScript работал, там как-то все просто и сразу работает, видимо из-за динамической типизации. А в Qt что-то осилить не могу.. Вопрос 1. Кто чем пользуется для отладочного вывода в виде XML кода содержимого QDomNode, QDomElement, QDomDocument? Я себе накорябал такую функцию, но она меня не устраивает, во-первых потому что может выводить только QDomNode и QDomElement, во-вторых потому что как-то странно выполняет свои функции. QString xmlnode_to_string(QDomNode xmldata) { QDomDocument tempdoc;
if(!xmldata.isNull()) { tempdoc.appendChild(xmldata.cloneNode()); return tempdoc.toString(); } else return ""; } А странность вот какая. Если выполнить код QDomDocument doc; QDomElement elm=doc.createElement("content"); qDebug() << "New element " << xmlnode_to_string(elm); то вместо ожидаемого "<content/>" мы видим пустую строку. Вопрос 2. Почему вместо "<content/>" вышеприведенный код выдает пустую строку? Ну и еще. Вопрос 3. Вот простой код // Коструирование DOM документа для записи в файл QDomDocument doc;
// Установка заголовка doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
// Установка формата версии QDomElement formvers=doc.createElement("format"); formvers.setAttribute("version",1); formvers.setAttribute("subversion",1); doc.appendChild(formvers);
qDebug() << "Doc document for write " << doc.toString();
// Запись DOM данных в файл QString filename="file.xml"; QFile wfile(filename); if (!wfile.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "Cant open file " << filename << " for write."; exit(1); } QTextStream out(&wfile); out.setCodec("UTF-8"); out << doc.toString(); При его выполнении получаю файл с содержимым <format version="1" subversion="1" />а должен получиться файл <?xml version="1.0" encoding="UTF-8"?> <format version="1" subversion="1" />почему генерируется файл без заголовка?
|
|
|
716
|
Qt / XML / Re: Ступор. Перебор одноуровненых элементов в документе.
|
: Август 01, 2008, 10:22
|
Таки да, cloneNode() помогло... Но факт остается фактом - в коде QDomDocument t("t"); t.appendChild(e); qDebug() << "Element " << t.toString(); нет и упоминания об объекте n, который в результате "мигрировал с одного документа в другой". Максимум что есть - передача производного объекта e в функцию appendChild(), причем передача по значению, а не по ссылке. А если идет передача по значению, объект e меняться не должен. В результате работы данного кода только объект t должен измениться и начать указывать своим узлом на временный оъект e. А объект n тут вообще не затрагивается. В какой момент происходит миграция объекта n с одного документа в другой? Блин, я уже боюсь пользоваться Qt с такими залипухами... Вместо работы с грабли на граблю наступаю.
|
|
|
717
|
Qt / XML / Ступор. Перебор одноуровненых элементов в документе.
|
: Июль 31, 2008, 23:18
|
Здравствуйте! Все время, для дебажного просмотра содержимого элемента в XML-виде, я пользовался такой конструкцией. // e - это QDomElement QDomDocument t("t"); t.appendChild(e); qDebug() << "Element " << t.toString(); Но вот третий день долбался с одной простой задачей, и никак не мог понять почему не работает... В конце концов нашел глюк, но почему он происходит - понять не могу. Задачка: имеем документ с одноуровневыми элементами. В XML формате он записывается так <element_1/> <element_2/> <element_3/> Мне его нужно обежать и вывести имена всех элементов на экран. Вот нормально работающий код // Конструируем документ QDomDocument rectab;
QDomElement e1=rectab.createElement("element_1"); rectab.appendChild(e1); QDomElement e2=rectab.createElement("element_2"); rectab.appendChild(e2); QDomElement e3=rectab.createElement("element_3"); rectab.appendChild(e3);
// Проверяем что получилось qDebug() << "Rectab " << rectab.toString();
// Обегаем все элементы QDomNode n = rectab.firstChild(); while(!n.isNull()) { QDomElement e = n.toElement(); // пробуем преобразовать узел в элемент. if(!e.isNull()) { qDebug() << "Element " << e.tagName(); // выводим имя узла } n = n.nextSibling(); } Он реально пробегает по всем элементам, и выводит их названия Rectab "<element_1/> <element_2/> <element_3/> " Element "element_1" Element "element_2" Element "element_3" А вот неправильно работающий цикл (стрелками показаны строчки которые были изменены относительно предыдущего примера кода) // Обегаем все элементы QDomNode n = rectab.firstChild(); while(!n.isNull()) { QDomElement e = n.toElement(); // пробуем преобразовать узел в элемент. if(!e.isNull()) { -> QDomDocument t("t"); -> t.appendChild(e); -> qDebug() << "Element " << t.toString(); // Выводим элемент на экран } n = n.nextSibling(); } Который обегает только первый элемент Rectab "<element_1/> <element_2/> <element_3/> " Element "<!DOCTYPE t> <element_1/>" То есть, элемент 2 и 3 не видится. Почему так происходит? По какой причине узел n теряет связи со своими последующими узлами в этом случае? Я n при выводе вообще не трогаю, использую временный объект t, в который вставляю временный объект e (делаю это чтоб увидеть XML-код). Почему же данный цикл не работает?
|
|
|
719
|
Qt / Пользовательский интерфейс (GUI) / Re: Передача данных из модального окна в основное через слот. Неполучается.
|
: Июль 23, 2008, 14:41
|
void mainwindow::recordview_add_new_context(void) { qDebug() << "In slot recordview_add_new_context()";
addnewrecord addnewrecordwin; int ret = addnewrecordwin.exec(); if (ret == QDialog::Rejected) return;
recordview_add_new(addnewrecord.recordName(), addnewrecord.recordValue()); } А во такой вопрос волнует... Данное окно удалится при выходе из этой функции? Вроде должно удалиться, ведь происходит выход из области видимости, а тип окна не static. Но хотелоь бы уточнить, а то тут в форуме натыкаюсь на споры удаляется окно или только скрывается.
|
|
|
720
|
Qt / Пользовательский интерфейс (GUI) / Re: Передача данных из модального окна в основное через слот. Неполучается.
|
: Июль 23, 2008, 14:14
|
Note that the signal and slots parameters must not contain any variable names, only the type. Ага, в этом и было дело. Постоянно путаюсь, надо или нет указывать имена параметров. Потому что если описывать слот вот так void recordview_select(const QModelIndex &index); то имя параметра указывать можно. Оказывается, имя указывать ненужно. Даже если строки в скобках в прототипе, реализации и в связке connect() будут одинаковыми, connect() не сможет создать соединение. В общем, при написании connect() имена указывать ненужно.
|
|
|
|
|