Название: Пункт меню
Отправлено: tip.se1en от Июня 09, 2011, 18:32
Доброго всем времени суток. Нужно создать оконное приложение, с возможностью вызова и запуска из него стороних приложений. В программе реализовано меню(«о программе,выход») и указатель на положения курсора ( нашёл в интернете). Нужно что бы был ещё один пункт меню «Приложения» по нажатию на который появлялось окошко 02.h #include <QtGui>// подключаем заголовочный файл в котором описаны все объекты, относящиеся к элементам графического интерфейса class MainWindow : public QMainWindow {// объявляем класс Q_OBJECT//обязательный макрос public: MainWindow(); protected:// виртуальные методы,вызываймые автоматически при изменении окна, закрытии окна virtual void resizeEvent(QResizeEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void closeEvent(QCloseEvent *event); private slots:// описание слотов void about(); private:// переменные-челены класса QAction *aboutAction; QAction *exitAction; QMenu *fileMenu; QLabel *sb1; QLabel *sb2; QLabel *sb3; bool askOnClose();// служебная функция, вызываймая при закрытии окна }; Main.cpp #include <QtGui> #include "02.h" MainWindow::MainWindow() { QTextCodec *codec = QTextCodec::codecForName("CP1251");//определили кодек QTextCodec::setCodecForTr(codec); aboutAction = new QAction(tr("&О программе"), this); aboutAction->setStatusTip(tr("Сведения о программе"));// создали действие О программе. задали для него текст подскази и связали с функцией about реализованной ниже connect(aboutAction, SIGNAL(triggered()), this, SLOT(about())); exitAction = new QAction(tr("В&ыход"), this); exitAction->setStatusTip(tr("Выход из программы"));// создали действие выход задали для него текст подсказки и клавиатурное сокращение, связали его с функцие close, выполняющей закрытие окна exitAction->setShortcut(tr("Ctrl+Q")); connect(exitAction, SIGNAL(triggered()), this, SLOT(close())); // создаётся меню файл, состоящее из двух пунктов fileMenu = menuBar()->addMenu(tr("&Файл")); fileMenu->addAction(aboutAction); fileMenu->addSeparator(); fileMenu->addAction(exitAction); sb1 = new QLabel(statusBar()); sb2 = new QLabel(statusBar()); sb3 = new QLabel(statusBar());
statusBar()->setSizeGripEnabled(false); statusBar()->addWidget(sb1, 2); statusBar()->addWidget(sb2, 1); statusBar()->addWidget(sb3, 1); sb1->setText(tr("Положение курсора")); setMouseTracking(true); } void MainWindow::resizeEvent(QResizeEvent *event) { QSize sz = event->size(); sb2->setText( QString( "(%1, %2)" ).arg( sz.width() ).arg( sz.height() ) ); } void MainWindow::mouseMoveEvent(QMouseEvent *event) { QPoint pos = event->pos(); sb3->setText( QString( "%1, %2" ).arg( pos.x() ).arg( pos.y() ) ); } void MainWindow::about() { QMessageBox::about( this, tr("О программе"), tr("<h2>текст</h2>" "<p>текст")); } bool MainWindow::askOnClose() { int r = QMessageBox::question( this, tr("Подтвердите"), tr("Выйти из программы?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes, QMessageBox::Cancel | QMessageBox::Escape); return (r == QMessageBox::Yes); } void MainWindow::closeEvent(QCloseEvent *event) { if (askOnClose()) { event->accept(); } else { event->ignore(); } } int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow mainWin; QBrush br(Qt::TexturePattern); mainWin.setFixedSize(1300, 1400); br.setTextureImage(QImage("C:/wood.jpg"));// установка фона окна QPalette plt = mainWin.palette(); plt.setBrush(QPalette::Background, br); mainWin.setPalette(plt);
mainWin.setWindowTitle("MainWindow");// установка надписи заголовка окна
mainWin.show();
return app.exec(); }
Нашёл в учебника Шлее Qt 4.5 код QStringList lst; QListWidget lwg; QListWidgetItem* pitem = 0;
lwg.setIconSize(QSize(48,48)); lst << "Word" <<"Google Chrome"; foreach(QString str, lst) { pitem = new QListWidgetItem(str, &lwg); pitem->setIcon(QPixmap(str + ".jpg")); lwg.resize(125, 130); lwg.show(); в коде не ясно как и откуда будут появлятся иконки( ну не в этом суть, нужно что бы когда появиться это окошко , пользователь мог выбрать нужный ему пункт, и приложение которое должно быть «под пунктом» запустилось, нашёл код вроде для запуска приложений QProcess prog ; prog.start("D:/…..exe"); Как собрать всё это воедино не знаю, помогите.
Название: Re: Пункт меню
Отправлено: daimon от Июня 09, 2011, 19:41
1 приложение, которое хочешь добавить как дочерний процесс должно обрабатывать входящие параметры - список строк(типа cmd ---- lupdate.exe C:\temp.h C:\temp.cpp ). Просто я так использовал - сделал адекватный сборщик сырцов, для перевода, в один файл *.ts из корневой папки любого проекта. 2. создаешь 3. int stateProcess = process.execute(QString <полный путь к приложению, которое хочешь запустить как процесс>, QStringList <список параметров>)); if(stateProcess == -2 || stateProcess == -1) QMessageBox::warning(this,QString(),tr("Error process")); - запускает процесс и ждёт пока он самостоятельно не закончит работу или не будет креш можна и - но тут тогда проблема надо ставить функцию с временем, которое должен работать процесс (по-умолчанию 3 секунды), время прошло - процесс убивается
Название: Re: Пункт меню
Отправлено: tip.se1en от Июня 10, 2011, 09:28
больше вариантов нету?
Название: Re: Пункт меню
Отправлено: daimon от Июня 10, 2011, 12:42
больше вариантов нету?
только через процессы
Название: Re: Пункт меню
Отправлено: kambala от Июня 10, 2011, 13:03
в коде не ясно как и откуда будут появлятся иконки( икони должны лежать в папке программы. в твоём примере это должны быть Word.jpg и Google Chrome.jpg QDesktopServices::openUrl(QUrl(тут_путь_к_программе_в_кавычках)) тоже может запускать программы
|