标签: qt4

如何在Qt中运行系统命令?

我必须在Qt中运行系统命令.但是我必须为这个命令辩护.

例如,用文本文件打开gedit.比如"gedit /home/oDx/Documents/a.txt"

但路径"/home/oDx/Documents/a.txt"将在"docPath"之类的变量中.那怎么能这样做呢?

qt system file qt4

52
推荐指数
3
解决办法
6万
查看次数

用Qt序列化

我正在用Qt库编写GUI.在我的GUI中,我有一个巨大的std :: map.

"MyType"是一个具有不同类型字段的类.

我想序列化std :: map.我怎样才能做到这一点?Qt是否为我们提供了必要的功能?

c++ serialization qt qt4

49
推荐指数
1
解决办法
4万
查看次数

如何用Qt"在Finder中显示"或"在资源管理器中显示"

是否可以在Windows资源管理器/ OS X Finder中打开文件夹,然后选择/突出显示该文件夹中的一个文件,并以跨平台方式执行此操作?现在,我做了类似的事情

QDesktopServices::openUrl( QUrl::fromLocalFile( path ) );
Run Code Online (Sandbox Code Playgroud)

哪里path是我要打开的文件夹的完整路径.显然,这只会打开文件夹,我将不得不手动追踪我需要的文件.当该文件夹中有数千个文件时,这有点问题.

如果我将它作为该文件夹中特定文件的路径,那么该文件是用该mime类型的默认应用程序打开的,这不是我需要的.相反,我需要相当于"在Finder中显示"或"在资源管理器中显示"的功能.

c++ qt qt4

49
推荐指数
4
解决办法
2万
查看次数

Qt GUI应用程序中的控制台输出?

我有一个在Windows上运行的Qt GUI应用程序,它允许传递命令行选项,在某些情况下我想向控制台输出一条消息,然后退出,例如:

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

  if (someCommandLineParam)
  {
    std::cout << "Hello, world!";
    return 0;
  }

  MainWindow w;
  w.show();

  return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从命令提示符运行应用程序时,不会显示控制台消息.有谁知道我怎么能让这个工作?

c++ windows qt qt4

47
推荐指数
5
解决办法
11万
查看次数

从QFile获取文件名?

例如:

QFile f("/home/umanga/Desktop/image.jpg");
Run Code Online (Sandbox Code Playgroud)

我怎么只得到文件名 - "image.jpg"?

qt qt4

47
推荐指数
3
解决办法
6万
查看次数

如何将PyQt脚本(.py)编译为Windows(.exe)和/或linux的单个独立可执行文件?

我开始摆弄PyQt,并从pyqt白皮书示例应用程序(pastebin)制作了一个"漂亮"的脚本

它在Windows和Linux中完美运行(两者都安装了qt环境).

现在我的问题是:因为我正在尝试使用Qt,因为它是经过编译的(至少是纯旧的基于C++的Qt),我如何编译一些.exe文件在Windows上运行它,或者用于Linux的独立可执行文件.

关键是我希望编译程序,因为速度和可移植性,而不是从源解释,这需要在任何机器上进行先前的设置.例如,其中一个目标是通过电子邮件将小gui脚本发送给根本不是程序员的同事.

python executable compilation qt4 pyqt4

43
推荐指数
2
解决办法
6万
查看次数

三重继承导致元类冲突......有时候

看起来我偶然发现了一个地狱级的地狱,即使我不想和它有任何关系.

我正在使用PySide在Qt4中编写应用程序.我想将事件驱动的部分与从Qt Designer文件生成的UI定义分开.因此,我创建了一个"控制器"类,但为了缓解我的生活,无论如何我多次继承它们.一个例子:

class BaseController(QObject):
    def setupEvents(self, parent):
        self.window = parent

class MainController(BaseController):
    pass

class MainWindow(QMainWindow, Ui_MainWindow, MainController):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setupUi(self)
        self.setupEvents(self)
Run Code Online (Sandbox Code Playgroud)

这按预期工作.它也有继承自(QDialog,Ui_Dialog,BaseController).但是当我BaseController继承并尝试从所述子类继承(代替BaseController)时,我收到一个错误:

TypeError:调用元类基类元类冲突时出错:派生类的元类必须是其所有基类的元类的(非严格)子类

澄清:这两个QMainWindowQDialog继承QObject.BaseController由于Qt事件系统的特殊性,它也必须继承它.Ui_类只继承自简单的Python对象类.我搜索了解决方案,但所有这些都涉及故意使用元类的情况.所以我必须做一些非常错误的事情.

编辑:添加图表可能会更清楚我的描述.

工作范例:

QObject
|      \___________________
|            object        |
QMainWindow     |          BaseController
|      /---Ui_MainWindow   |
|      |                   MainController
MainWindow-----------------/
Run Code Online (Sandbox Code Playgroud)

另一个工作示例:

QObject
|      \___________________
|            object        |
QDialog         |          BaseController
|      /---Ui_OtherWindow  |
|      |                   | …
Run Code Online (Sandbox Code Playgroud)

python oop metaclass qt4 multiple-inheritance

39
推荐指数
2
解决办法
1万
查看次数

Qt 4.5 - 发出信号是函数调用还是线程,它会阻塞吗?

我不确定Qt 4.5中信号/插槽机制的性质.发出信号时,它是阻塞函数调用还是线程?说这个

emit GrabLatestData();

// proceed with latest data
Run Code Online (Sandbox Code Playgroud)

在继续下一行之前,是否会解决所有信号/槽链?

qt qt4

36
推荐指数
3
解决办法
2万
查看次数

在Windows上的Qt可执行文件中设置应用程序信息

任何人都有关于从Qt设置应用程序信息(即右键单击.exe->属性)的提示?

我可以将任意版本字符串添加到Qt资源文件(qrc)并显示它们.但大多数Windows安装程序检查版本号,除了手动维护单独的.RC文件之外,我找不到设置这些字段的Qt方法

某些让你从自动构建中更新它的方法也很不错!

windows resources version qt4 versioninfo

36
推荐指数
2
解决办法
3万
查看次数

Qt未定义对vtable的引用

我是Qt编程的初学者,并使用代码块进行编程.我创建了3个文件communic.h,commmunicate.cpp和main.cpp,如下所示:

communicate.h

    #ifndef COMMUNICATE_H
    #define COMMUNICATE_H

    #include <QWidget>
    #include <QApplication>
    #include <QPushButton>
    #include <QLabel>

    class Communicate : public QWidget
    {
      Q_OBJECT

      public:
        Communicate(QWidget *parent = 0);


      private slots:
        void OnPlus();
        void OnMinus();

      private:
        QLabel *label;

    };

    #endif
Run Code Online (Sandbox Code Playgroud)

communicate.cpp

#include "communicate.h"

Communicate::Communicate(QWidget *parent)
    : QWidget(parent)
{
  QPushButton *plus = new QPushButton("+", this);
  plus->setGeometry(50, 40, 75, 30);

  QPushButton *minus = new QPushButton("-", this);
  minus->setGeometry(50, 100, 75, 30);

  label = new QLabel("0", this);
  label->setGeometry(190, 80, 20, 30);

  connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
  connect(minus, SIGNAL(clicked()), …
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt4 codeblocks

33
推荐指数
4
解决办法
7万
查看次数