我必须在Qt中运行系统命令.但是我必须为这个命令辩护.
例如,用文本文件打开gedit.比如"gedit /home/oDx/Documents/a.txt"
但路径"/home/oDx/Documents/a.txt"将在"docPath"之类的变量中.那怎么能这样做呢?
我正在用Qt库编写GUI.在我的GUI中,我有一个巨大的std :: map.
"MyType"是一个具有不同类型字段的类.
我想序列化std :: map.我怎样才能做到这一点?Qt是否为我们提供了必要的功能?
是否可以在Windows资源管理器/ OS X Finder中打开文件夹,然后选择/突出显示该文件夹中的一个文件,并以跨平台方式执行此操作?现在,我做了类似的事情
QDesktopServices::openUrl( QUrl::fromLocalFile( path ) );
Run Code Online (Sandbox Code Playgroud)
哪里path是我要打开的文件夹的完整路径.显然,这只会打开文件夹,我将不得不手动追踪我需要的文件.当该文件夹中有数千个文件时,这有点问题.
如果我将它作为该文件夹中特定文件的路径,那么该文件是用该mime类型的默认应用程序打开的,这不是我需要的.相反,我需要相当于"在Finder中显示"或"在资源管理器中显示"的功能.
我有一个在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)
但是,当我从命令提示符运行应用程序时,不会显示控制台消息.有谁知道我怎么能让这个工作?
例如:
QFile f("/home/umanga/Desktop/image.jpg");
Run Code Online (Sandbox Code Playgroud)
我怎么只得到文件名 - "image.jpg"?
我开始摆弄PyQt,并从pyqt白皮书示例应用程序(pastebin)制作了一个"漂亮"的脚本
它在Windows和Linux中完美运行(两者都安装了qt环境).
现在我的问题是:因为我正在尝试使用Qt,因为它是经过编译的(至少是纯旧的基于C++的Qt),我如何编译一些.exe文件在Windows上运行它,或者用于Linux的独立可执行文件.
关键是我希望编译程序,因为速度和可移植性,而不是从源解释,这需要在任何机器上进行先前的设置.例如,其中一个目标是通过电子邮件将小gui脚本发送给根本不是程序员的同事.
看起来我偶然发现了一个地狱级的地狱,即使我不想和它有任何关系.
我正在使用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:调用元类基类元类冲突时出错:派生类的元类必须是其所有基类的元类的(非严格)子类
澄清:这两个QMainWindow和QDialog继承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) 我不确定Qt 4.5中信号/插槽机制的性质.发出信号时,它是阻塞函数调用还是线程?说这个
emit GrabLatestData();
// proceed with latest data
Run Code Online (Sandbox Code Playgroud)
在继续下一行之前,是否会解决所有信号/槽链?
任何人都有关于从Qt设置应用程序信息(即右键单击.exe->属性)的提示?
我可以将任意版本字符串添加到Qt资源文件(qrc)并显示它们.但大多数Windows安装程序检查版本号,除了手动维护单独的.RC文件之外,我找不到设置这些字段的Qt方法
某些让你从自动构建中更新它的方法也很不错!
我是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) qt4 ×10
qt ×6
c++ ×4
python ×2
windows ×2
codeblocks ×1
compilation ×1
executable ×1
file ×1
metaclass ×1
oop ×1
pyqt4 ×1
resources ×1
system ×1
version ×1
versioninfo ×1