QT难题

codeshawn 2014-12-23 09:01:25
int main(int argc, char *argv[])
{

QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec) ;
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
Dialog *w;
QTextStream in(stdin);
while(1)
{
int x;
in>>x;
switch(x)
{

case 1:
{
set_display stdy(111,151);
QApplication a(argc, argv);
w=new Dialog(111,151);
w->show_menu();
w->show();
return a.exec();
break;
}
case 2:
{
set_display stdy(70,70);
QApplication a(argc, argv);
w=new Dialog(70,70);
w->set_mute();
w->show();
return a.exec();
break;
}
case -1:
{
w->close();
break;
}
default:break;
}
}
}


主程序不在QT界面中,他通过调用start( )和stop( )来显示一个界面和关闭一个界面,这里有很多个界面,所以相当于调用一个对应的start就会创建一个QT程序显示对应的界面,同样调用一个stop也会结束一个QT程序关闭对应窗口,执行每个QT程序之前都会设置相应的分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),我上面的测试程序只能运行输入1后要手动ctrl+c后再手动运行程序输入2,
我主要想实现:运行程序输入1执行一个QT程序,输入-1关闭当前QT程序,输入2又运行一个QT程序!听说用多线程不能做界面,很是郁闷??求解
...全文
356 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2015-01-22
  • 打赏
  • 举报
回复
这个,一个本办法就是做好几个gui applications然后用一个主gui来通过QProcess::execute()操控他们
codeshawn 2015-01-20
  • 打赏
  • 举报
回复
不要就此沉默啊!!!!!!一直在线苦等!!!!!!!!
Creator_莫言 2015-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u012175394 的回复:
主要是每次都要设置分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),而设置分辨率又必须在QApplication前面,所以每显示一个窗体大小不一的对话框就要设置一次分辨率并用QApplication创建一个对象,我想创建一个线程包含QApplication,但有警告:GUI不再主线程中,这个怎么弄啊????
GUI必须在主线程中,你可以试试将你的Widget全部分离出去,然后用一个程序去QProcess调用它们
codeshawn 2015-01-15
  • 打赏
  • 举报
回复
主要是每次都要设置分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),而设置分辨率又必须在QApplication前面,所以每显示一个窗体大小不一的对话框就要设置一次分辨率并用QApplication创建一个对象,我想创建一个线程包含QApplication,但有警告:GUI不再主线程中,这个怎么弄啊????
大卫无限 2014-12-23
  • 打赏
  • 举报
回复
pro文件里面加入 CONFIG += console main.cpp

#include <QApplication>
#include <QDialog>
#include <QTextStream>
#include <QThread>

class Wnds : public QObject
{
    Q_OBJECT
public:
    Wnds() : w(0) { }

public slots:
    void showWnd(int x)
    {
        if (w != 0)
            delete w;

        switch(x)
        {
        case 1:
        {
            w = new QDialog();
            w->setWindowTitle("1");
            w->show();
            break;
        }
        case 2:
        {
            w = new QDialog();
            w->setWindowTitle("2");
            w->show();
            break;
        }
        }//end switch
    }

private:
    QDialog *w;
};

class CmdLine : public QThread
{
    Q_OBJECT
protected:
    void run()
    {
        while(1)
        {
            QTextStream in(stdin);
            int x = -1;
            in >> x;
            emit DoGotCmdLine(x);
        }
    }
signals:
    void DoGotCmdLine(int);
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Wnds w;

    CmdLine c;
    c.start();
    QObject::connect(&c, SIGNAL(DoGotCmdLine(int)),
                     &w, SLOT(showWnd(int)), Qt::QueuedConnection);
    return a.exec();
}

#include "main.moc" //这里是实现文件写到cpp里面才需要的,在qtcreator里面先qmake,再编译方可通过.
原型,没有多做处理.比如线程就没有处理退出.
michael2988 2014-12-23
  • 打赏
  • 举报
回复
程序会在a.exec();处stop,直到当前程序关闭。

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧