![]() |
![]() |
![]() |
|
Кто-нибудь помнит C++? | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
01.04.09
✎
16:10
|
А то что-то мозг ломаю:
есть класс наследник QWidget, есть функция показа сообщения QMessageBox::information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ) [static] на строку QMessageBox::information(this, tr("OK")); ругается error: no matching function for call to ‘QMessageBox::information(MainDialog* const, QString)’ note: candidates are: static QMessageBox::StandardButton QMessageBox::information(QWidget*, const QString&, const QString&, QFlags<QMessageBox::StandardButton>, QMessageBox::StandardButton) |
|||
1
ДенисЧ
01.04.09
✎
16:11
|
Объяви переменную QString, присвой ей значение и передавай.
Или делай явное приведение типа |
|||
2
Fragster
гуру
01.04.09
✎
16:15
|
а, не, это я протупил - у него же 3 обязательных параметра, все приводится
нормально тогда другой вопрос: есть класс QPushButton, наследник QAbstractButton, этот код дает ошибку: QPushButton *btnOk = msgBox.addButton(tr("Окей"), QMessageBox::ActionRole); QPushButton *btnClose = msgBox.addButton(tr("Закрыть"), QMessageBox::DestructiveRole); msgBox.exec(); QAbstractButton *btnClicked = msgBox.clickedButton(); if (btnOk==btnClicked) { QMessageBox::information(this, tr("OK"), tr("OK")); } maindialog.cpp:28: error: comparison between distinct pointer types ‘QPushButton*’ and ‘QAbstractButton*’ lacks a cast при этом в дебаггере если закомментить условие - btnClicked и btnOk - одинаковый адрес имеют... а эта хрень addButton - всегда PushButton возвращает... |
|||
3
Andry888
01.04.09
✎
16:15
|
вроде три обз. параметра...
|
|||
4
Fragster
гуру
01.04.09
✎
16:16
|
(3) ага, уже увидел...
|
|||
5
toypaul
гуру
01.04.09
✎
16:19
|
(2) фу изврат какой. приведи к одному типу и сравнивай
|
|||
6
toypaul
гуру
01.04.09
✎
16:20
|
вот так (QAbstractButton*)btnOk==btnClicked
|
|||
7
Fragster
гуру
01.04.09
✎
16:21
|
(5) это пример из мануала :(
Advanced Usage If the standard buttons are not flexible enough for your message box, you can use the addButton() overload that takes a text and a ButtonRoleto to add custom buttons. The ButtonRole is used by QMessageBox to determine the ordering of the buttons on screen (which varies according to the platform). You can test the value of clickedButton() after calling exec(). For example, QMessageBox msgBox; QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole); QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort); msgBox.exec(); if (msgBox.clickedButton() == connectButton) { // connect } else if (msgBox.clickedButton() == abortButton) { // abort } |
|||
8
Fragster
гуру
01.04.09
✎
16:23
|
(6) однако заработало... почему в мануале не так написано :\ я ж не помню уже
совсем нифига |
|||
9
ДенисЧ
01.04.09
✎
16:23
|
А ты сравни типы, которые сравниваешь...
|
|||
10
Andry888
01.04.09
✎
16:23
|
а в (7) как ты понял что msgBox.clickedButton() возвращает объект класса QAbstractButton???
|
|||
11
ДенисЧ
01.04.09
✎
16:24
|
В мануале написано, что кликед баттон - типа КуПушБаттон.
ты же её явно к австракту приводишь... |
|||
12
Andry888
01.04.09
✎
16:26
|
(11) а где там приведение к QAbstractButton?
|
|||
13
Fragster
гуру
01.04.09
✎
16:27
|
(10) вмануале написано. в дебаггере прогнал - точно, так и есть....
(11) у меня в мануале написано - абстракт баттон... если попробовать пушбаттон, то ругается maindialog.cpp:27: error: cannot convert ‘QAbstractButton*’ to ‘QPushButton*’ in initialization |
|||
14
ДенисЧ
01.04.09
✎
16:28
|
(13) естественно каннот... Это когда же указатель на предка можно было кастить к указателю на потомка...
|
|||
15
Fragster
гуру
01.04.09
✎
16:30
|
на это тоже ругается:
QAbstractButton *btnClose = msgBox.addButton(tr("Закрыть"), QMessageBox::DestructiveRole); /maindialog.cpp:25: error: cannot convert ‘QPushButton*’ to ‘QAbstractButton*’ in initialization |
|||
16
Fragster
гуру
01.04.09
✎
16:31
|
(14) ладно, пойду дальше долбить
|
|||
17
orefkov
01.04.09
✎
17:01
|
В чем хоть компилишь скажи.
|
|||
18
orefkov
01.04.09
✎
17:10
|
(15)
Это у тебя либо С++ неправильный, либо QT. А что скажет на такое: QAbstractButton *btnClose = static_cast<QAbstractButton*>(msgBox.addButton(tr("Закрыть"), QMessageBox::DestructiveRole)); |
|||
19
Fragster
гуру
01.04.09
✎
17:38
|
(17) компилю qmake
(18) так не взлетает, взлетает так (правда один вуй, что в (6)): QAbstractButton *btnClose = (QAbstractButton*)msgBox.addButton(tr("Закрыть"), QMessageBox::DestructiveRole); |
|||
20
Хранимая Процедура
01.04.09
✎
17:42
|
забудь кресты.
поделия типа кутэ - не нужны. .NET - наше все! |
|||
21
trdm
01.04.09
✎
17:46
|
У Qt есть есть отличный набор "Examples and Demos".
http://www.doc.crossplatform.ru/qt/en/4.3.2/dialogs-standarddialogs-dialog-cpp.html void Dialog::questionMessage() { QMessageBox::StandardButton reply; reply = QMessageBox::question(this, tr("QMessageBox::question()"), MESSAGE, QMessageBox::Ok | QMessageBox::Close); if (reply == QMessageBox::Ok) questionLabel->setText(tr("Ok")); else if (reply == QMessageBox::Close) questionLabel->setText(tr("Close")); } |
|||
22
trdm
01.04.09
✎
17:46
|
(20) нафиг
|
|||
23
trdm
01.04.09
✎
17:48
|
+(21) to (19) +незабудь подцепить файл переводов на русский язык.
|
|||
24
Fragster
гуру
01.04.09
✎
20:50
|
(21) по ссылке ровно то же, что в (7) - встроенная справка из libqt-devel-docs
:) |
|||
25
trdm
01.04.09
✎
23:30
|
не, почему7
|
|||
26
orefkov
02.04.09
✎
07:21
|
(19)
qmake не компилит, qmake тока make-файлы делает. Ну я так понимаю, что у тебя linux и GCC ? Говорю, у тебя какой-то С++ или QT неправильный, раз (18) не работает. Указатель на производный класс в указатель на базовый класс должен кастится автоматом. А раз даже явный статик каст не работает, значит - либо QPushButton не наследник от QAbstractButton (неправильный QT), либо что-то с компилятором. |
|||
27
ДенисЧ
02.04.09
✎
07:52
|
(26) qmake файлы не делает, она их использует :-))
|
|||
28
orefkov
02.04.09
✎
08:42
|
(27)
Да ты что.... Вообще-то собираю я свои проекты qmake make qmake из файлов проекта QT (*.pro) создает обычные make-файлы для make. |
|||
29
ДенисЧ
02.04.09
✎
08:44
|
(28) То есть в pro прописаны правила для qmake, которые позволяют создать правила для qmake?
Рекурсия получается... |
|||
30
orefkov
02.04.09
✎
08:45
|
(29)
В *.pro правила для qmake, которые позволяют создать файл сборки для make. Внимательнее читаем, внимательнее. Рекурсии нет. |
|||
31
ДенисЧ
02.04.09
✎
08:47
|
(30) то есть qmake украла честное имя? тогда претензий нет :-)))
|
|||
32
v77
02.04.09
✎
08:49
|
УРА!!! РЕКУРСИЯ!!! Любимое слово 1С программистов. :)))
|
|||
33
orefkov
02.04.09
✎
08:50
|
Претензий нет, рекурсиии нет...
Ложки тоже нет. Наверное, и .NET - нет. |
|||
34
ДенисЧ
02.04.09
✎
08:51
|
make, gmake, nmake, qmake...
овощь, вас, тридваразов, разберёшь... (с) :-))) |
|||
35
trdm
02.04.09
✎
13:46
|
на самом деле у qmake много функций.
он может генерить *.pro - файлы. qmake -project он может генерить мейкфайлы qmake -makefile *.pro Он может сгенерить файлы проектов для MS студии qmake -tp vc -o hello.dsp hello.pro вообще использование qmake убирает много гемора. |
|||
36
trdm
02.04.09
✎
13:58
|
(34) какого коллайдера?
(с) .... |
|||
37
Fragster
гуру
02.04.09
✎
16:24
|
Зацените го_внокод:
QProcess *process = new QProcess(); process->start(tr("cmd")); QTextStream *stream = new QTextStream(process); stream->setCodec("cp866"); *stream << "start \"1c\" " << command << "\r\n" << "exit\r\n"; stream->flush(); process->waitForFinished(); delete process; delete stream; а все потому что как бы я не извращался, при process->startDetached(tr("<здесь строка запуска 1с с пробелом в пути к конфигурации>")); 1c воспринимает путь только до пробела... нотепад же, например, по пути с пробелами файлы открывает... |
|||
38
orefkov
02.04.09
✎
16:30
|
Попробуй
process->startDetached(tr("%1 /D \"%2\"").arg(pathTo1CExe, pathToBase)) |
|||
39
Fragster
гуру
02.04.09
✎
16:37
|
(38) странно, так пробел воспринимает... счас замучаю кодировку
|
|||
40
Fragster
гуру
02.04.09
✎
16:37
|
(39)+ (а то там еще и русские буквы есть :))
|
|||
41
Fragster
гуру
02.04.09
✎
16:42
|
(38) просто все базы в файле записаны как /D"<путь>" - и из командной строки так работает
|
|||
42
trdm
02.04.09
✎
19:20
|
блин, не знал, что tr() хавает .arg();
O_o видно плохо ман покурил О_о.. |
|||
43
Fragster
гуру
02.04.09
✎
19:39
|
(42) это QString .arg хавает...
|
|||
44
trdm
02.04.09
✎
22:00
|
это я знаю. вери удобный штучка..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |