Имя: Пароль:
1C
 
Кто-нибудь помнит 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
это я знаю. вери удобный штучка..