Russian Qt Forum
Ноябрь 23, 2024, 10:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пункт меню  (Прочитано 2943 раз)
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");

Как собрать всё это воедино не знаю, помогите.


 
Записан
daimon
Гость
« Ответ #1 : Июнь 09, 2011, 19:41 »

1 приложение, которое хочешь добавить как дочерний процесс должно обрабатывать входящие параметры - список строк(типа cmd ----
Код:
lupdate.exe C:\temp.h C:\temp.cpp
). Просто я так использовал - сделал адекватный сборщик сырцов, для перевода, в один файл *.ts из корневой папки любого проекта.
 2. создаешь
Код:
 QProcess temp; 
3.
Код:
int stateProcess = process.execute(QString <полный путь к приложению, которое хочешь запустить как процесс>, QStringList <список параметров>));
  if(stateProcess == -2 || stateProcess == -1) QMessageBox::warning(this,QString(),tr("Error process"));

Код:
execute
- запускает процесс и ждёт пока он самостоятельно не закончит работу или не будет креш

можна и
Код:
start(...) 
- но тут тогда проблема надо ставить функцию
Код:
waitForFinish
с временем, которое должен работать процесс (по-умолчанию 3 секунды), время прошло - процесс убивается
« Последнее редактирование: Июнь 09, 2011, 19:54 от daimon » Записан
tip.se1en
Гость
« Ответ #2 : Июнь 10, 2011, 09:28 »

больше вариантов нету?
Записан
daimon
Гость
« Ответ #3 : Июнь 10, 2011, 12:42 »

больше вариантов нету?
только через процессы
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Июнь 10, 2011, 13:03 »

Цитировать
в коде не ясно как и откуда будут появлятся иконки(
икони должны лежать в папке программы. в твоём примере это должны быть Word.jpg и Google Chrome.jpg

QDesktopServices::openUrl(QUrl(тут_путь_к_программе_в_кавычках)) тоже может запускать программы
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.