我正在做这样的事情:
MyClass::MyClass(QWidget *parent) : QLabel(parent)
{
this->MyMenu = new QMenu();
QAction* act_del = new QAction(MyMenu);
act_delete->setText("MyAction");
MyMenu->addAction(act_del);
QObject::connect(act_del,SIGNAL(triggered()),this,SLOT(MySlot()));
}
void MyClass::MySlot()
{
//Not called
}
Run Code Online (Sandbox Code Playgroud)
关于何时触发SIGNAL的任何建议都不会被调用.这是显示菜单的位置:
void MyClass::contextMenuEvent(QContextMenuEvent *ev)
{
QPoint globalPos = this->mapToGlobal(ev->pos());
QAction* selectedItem = MyMenu->exec(globalPos);
if (selectedItem)
{
}
else
{
// nothing was chosen
}
}
Run Code Online (Sandbox Code Playgroud)
为什么没有调用SLOT的任何建议?
您好,我尝试复制目录及其所有内容。我认为一个好的开始是列出所有子目录,这样我就可以了解并将子结构复制到我的目标文件夹。
但我需要获取从 QDir 开始的路径,而不是从机器根目录开始的路径,我该怎么做才能将sweetassurfwear/folder/folder替换为/usr/local/websites/sweetassurfwear/folder/folder
到目前为止,这是我的代码
QDir targetDir1("/home/brett/sweetback");
targetDir1.mkdir("sweetassurfwear");
QDir targetDir("/usr/local/websites/sweetassurfwear");
targetDir.setFilter(QDir::NoDotAndDotDot| QDir::Dirs | QDir::Files);
QDirIterator it(targetDir, QDirIterator::Subdirectories);
while (it.hasNext()) {
QFileInfo Info(it.next().relativePath());
QString testName = QString(Info.fileName());
QString testPath = QString(Info.absoluteFilePath());
if(Info.isDir()){
// QString cpd = "/home/brett/sweetback/sweetassurfwear/";
// targetDir.mkdir(cpd+testName);
QString dirname = Info.filePath();
ui.textEdit->append(QString("Copy Files " + dirname));
}
}
Run Code Online (Sandbox Code Playgroud) 我目前有这样的事情:
QSharedPointer<t> Qsharedfoo;
Run Code Online (Sandbox Code Playgroud)
现在我有一个指向foo的原始指针rawfoo.如何让foo指向拥有原始指针并开始指向它.我知道在使用共享指针的boost中我们可以使用它们boost::make_shared
如何使用它QSharedPointer?
我想做这样的事情:
Qsharedfoo = rawfoo
Run Code Online (Sandbox Code Playgroud) 我目前正在 Qt 中编写一个网络应用程序,需要以以下形式分隔网络地址:
example.org:1234
Run Code Online (Sandbox Code Playgroud)
到单独的主机名和端口 QStrings 中。
是否有 Qt 函数可以轻松解析它并检查给定的输入是否正确?
提前致谢!
假设我有以下列表:
QList<Type*> list;
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
Run Code Online (Sandbox Code Playgroud)
如果我想清空列表,我可以打电话 list.clear()
它会自动删除每个指针,还是必须执行以下操作以防止内存泄漏:
foreach (Type* t, list) delete t;
list.clear();
Run Code Online (Sandbox Code Playgroud) 我在排序QList包含以下内容的实例时遇到问题struct:
class modelHeuristic
{
typedef struct {
QString c;
QString t;
double value;
}Saving;
public:
QList<Saving> list_saving;
#include "klarkeright.h"
klarkeRight::klarkeRight()
{
}
void klarkeRight::Algoritmo_Asimetrico(modelHeuristic *model)
{
qSort(model->list_saving.begin(), model->list_saving.end());
}
Run Code Online (Sandbox Code Playgroud)
错误:二进制表达式的无效操作数('const modelHeuristic :: Saving'和'const modelHeuristic :: Saving')return(t1 <t2);
我目前使用的是 Ubuntu 18.04 LTS。
我正在尝试安装一个需要 PyQt4 和 QtWebKit 的程序,因此需要手动安装,因为 QtWebKit 已从 PyQt4 中排除。
我下载了 sip 4.19.12 (4.19.14 安装 PyQt4 失败)和 PyQt4 4.12.13
我运行了一个 virtualenv,确保它按预期工作并尝试安装 sip,它有效:
$ python configure.py
$ make
$ make install
Run Code Online (Sandbox Code Playgroud)
然后我对 PyQt4 进行同样的操作,没有错误。
当我尝试运行我的程序 .py 时,出现以下错误:
$ python RNAEditor.py
Traceback (most recent call last):
File "RNAEditor.py", line 9, in <module>
from Helper import Helper, Parameters
File "/home/bioinfo/Documentos/Ferramentas_RNAEditor/RNAEDITOR_ch/Helper.py", line 13, in <module>
from PyQt4 import QtCore
ImportError: No module named sip
$ sudo python RNAEditor.py
Traceback (most recent …Run Code Online (Sandbox Code Playgroud) 创建一个对话框:
class GUI(QtGui.QMainWindow):
def __init__(self):
super(GUI, self).__init__()
global dialog
dialog = QtGui.QDialog()
myGui = GUI()
Run Code Online (Sandbox Code Playgroud)
缺少最小化窗口按钮(OSX).它在Windows中.我是否必须设置一些标志来显示这个丢失的控制器?请指教,提前致谢!
我没有尝试用QtGui.QDialog()解决无最小化按钮问题.但似乎我部分地知道如何使用QtGui.QMainWindow获取该缺失按钮.以下是说明基本语法的最简单代码:
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication(sys.argv)
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
myLineEdit = QtGui.QLineEdit("myLineEdit")
myBoxLayout.addWidget(myLineEdit)
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
window = MainWindow()
window.show()
window.resize(480,320)
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
QtGui.QMainWindow背后的'关键''概念'是我们首先声明QWidget()
myQWidget = QtGui.QWidget()
Run Code Online (Sandbox Code Playgroud)
我们为其分配了一个'主'布局:
myQWidget.setLayout(myBoxLayout)
Run Code Online (Sandbox Code Playgroud)
不要忘记的最后一步是使用以下命令将此QWidget()分配给对话框本身:
self.setCentralWidget(myQWidget)
Run Code Online (Sandbox Code Playgroud)
其中'self'是QtGui.QMainWindow的实例子类.
我正在尝试为移动电话开发Qt应用程序,因此我决定不使用任何标准库(因为我担心某些平台可能尚未得到支持).所以,我不得不重新实现智能指针包装器(当然使用标准草案),没有任何标准头文件.在Qt中,有一些Widgets,例如QMenu和QToolBar,当需要创建时 - 它是这样创建的
QMenu *mainMenu = new QMenu;
QToolBar *toolBar = new QToolBar;
//To add a new menu bar or ToolBar, we do
mainMenu = menuBar()->addMenu("&File");
//add all the elements to the first menuBar
mainMenu->addAction(QAction { });
mainMenu = menuBar()->addMenu("&Edit"); //for second Menu
//same goes for QToolBar
Run Code Online (Sandbox Code Playgroud)
我实现unique_ptr"观察者"的唯一方法是使用get(),operator*和operator->成员函数来访问底层成员.显而易见的是,MenuBar() - > addNew()返回一个指向另一个mainMenu的新指针.现在我的问题是,旧指针会发生什么?什么跟踪他们?如何使用智能指针代替这些裸指针,或者我必须坚持使用严格使用裸指针的"老方法"?
注意:所有文件都可以在这里找到
我正在尝试使用以下代码学习如何在窗口化应用程序中序列化QMap对象:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QString>
#include <QDataStream>
#include <QMap>
#include <QDebug>
void write ()
{
QString filename = "Z:/snippets.txt";
QFile myFile (filename);
if (!myFile.open(QIODevice::WriteOnly))
{
qDebug() << "Could not write " << filename;
return;
}
QMap<QString,QString> map;
map.insert("one","this is 1");
map.insert("two","this is 2");
map.insert("three","this is 3");
QDataStream out (&myFile);
out.setVersion(QDataStream::Qt_5_3);
out<<map;
myFile.flush();
myFile.close();
}
QMap<QString,QString> read ()
{
QString filename = "Z:/snippets.txt";
QFile myFile (filename);
QMap<QString,QString> map;
QDataStream in (&myFile);
in.setVersion(QDataStream::Qt_5_3);
if (!myFile.open(QIODevice::WriteOnly))
{
qDebug() << …Run Code Online (Sandbox Code Playgroud)