- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 QT Creator 创建了 MainWindow
类。然后我将一些 pushbutton
添加到 MainWindow
以打开一个新对话框,我使用 QT Form Designer 创建了表单类。
当用户单击该按钮时,将打开一个新对话框。新对话框有一个 QTableWidget
和一个 pushbutton
。用户可以用一些值填充 QTableWidget
并在单击对话框的 pushbutton
之后我想将这些值发送到 MainWindow
以填充 QVector x
和 QVector y
是 MainWindow
类的属性。
我怎样才能做到这一点?如何从 QDialog
获取 MainWindow
的实例?我会在函数中写什么:
void Dialog::on_pushButton_clicked() {
// Code Here
}
提前感谢您的帮助,
彼得在我的两个类的代码下面
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "dialog.h"
#include <QVector>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
private:
Ui::MainWindow *ui;
Dialog *geometria;
QVector<double> x;
QVector<double> y;
private slots:
void generate();
};
#endif // MAINWINDOW_H
////////////////////////////////////////
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
geometria=new Dialog(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(generuj_przekroj()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::generate()
{
geometria->show();
}
////////////////////////////////////
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
public slots:
void wcisnij();
void wstaw_wiersz();
bool eventFilter(QObject *target, QEvent *event);
private slots:
void on_pushButton_clicked();
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
/////////////////////////////////////////
#include "dialog.h"
#include "ui_dialog.h"
#include <QKeyEvent>
#include "xy.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(10);
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setCurrentCell(4,1);
ui->tableWidget->installEventFilter(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(wcisnij()));
connect(ui->tableWidget,SIGNAL(itemSelectionChanged()),this,SLOT(wcisnij()));
connect(ui->tableWidget,SIGNAL(itemSelectionChanged()),this,SLOT(wstaw_wiersz()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::wcisnij()
{
int r=ui->tableWidget->currentRow();
int c=ui->tableWidget->currentColumn();
}
void Dialog::wstaw_wiersz()
{
int n=0;
n=ui->tableWidget->rowCount();
if(ui->tableWidget->currentRow()==n-1)
ui->tableWidget->setRowCount(n+1);
}
bool Dialog::eventFilter(QObject *target, QEvent *event) {
if (target==ui->tableWidget && event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if( keyEvent->key() == Qt::Key_Return|| keyEvent->key() == Qt::Key_Down )
{
int n=0;
int k=0;
n=ui->tableWidget->currentRow();
k=ui->tableWidget->currentColumn();
ui->tableWidget->setCurrentCell(n+1,k);
}
if( keyEvent->key() == Qt::Key_Up )
{
int n=0;
int k=0;
n=ui->tableWidget->currentRow();
k=ui->tableWidget->currentColumn();
ui->tableWidget->setCurrentCell(n-1,k);
}
return true;
}
else
return QObject::eventFilter(target, event);
}
void Dialog::on_pushButton_clicked()
{
}
最佳答案
简短的回答是在您的对话框中加载数据,然后向 MainWindow 发出准备就绪的信号,让 MainWindow 获取数据。
添加到 Dialog.h:
public:
std::vector<float> getX() { return x; }
std::vector<float> getY() { return y; }
signals:
dataReady();
private:
QVector<double> x;
QVector<double> y;
添加到 Dialog.cpp:
void Dialog::on_pushButton_clicked()
for (int r=0; r<rows; ++r)
for (int c=0; c<rows; ++c) {
QTableWidgetItem cell = tableWidget->item(r, c);
QString contents = cell.text();
double val = contents.toDouble();
x.push_back(val);
}
// And do the same to collect y data
emit dataReady();
添加到MainWindow.h
private slots:
void onDataReady();
添加到 MainWindow.cpp
MainWindow::MainWindow(...etc
{ ...
geometria=new Dialog(this);
connect(*geometria, SIGNAL(dataReady()), this, SLOT(onDataReady()));
...
}
MainWindow::onDataReady()
{
x = geometria->getX();
y = geometria->getY();
}
关于c++ - 如何通过Qdialog中的qtablewidget填充作为MainWindow成员的qvector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762083/
我做了我的研究,人们倾向于使用 ViewModel 来实现这一点,但我有点陷入其中。 我有一个 public ObservableCollection orderList { get; set; }
当用户更改主题时,我使用 mainWindow.webContents.send 更改 DOM 中的类。我还将它保存在商店中,在键 theme 下。 mainWindow.webContents.se
所以我有一个名为 MainWindow 的空主框架和一个 WelcomeWidget,它在程序启动时立即调用并加载到主框架中。然后我想要 WelcomeWidget 中的按钮 next_btn 调用
像a一样用slot和signal连接就对了 connect( ui->widget, SIGNAL( GetSquareParameters( int &, int &,int &,int &)),
我正在尝试构建一个桌面应用程序,使用 Electron 在 web View 中打开 gmail。在我的主文件中,我已经加载了这样的网址 mainWindow.loadURL("https://gma
在我的 (Py)Qt4 应用程序中,直到用户使用 command-tab 切换离开应用程序,然后使用 command-tabs 切换回它,主窗 Eloquent 会出现。 奇怪的是这个问题仅在双击启动
我有一个带有菜单的MainWindow,可以打开一个注册对话框。如何在注册后更新 MainWindow 中的 tableView? 这是我的 MainWindow 实现: MainWindow::Ma
我想使用 PyQt5 和 QtDesigner 开始一个新项目。首先,我只是复制了 PyQt4 中以前项目中的代码,并将其调整为 PyQt5 中的更改。因此,启动 Main Window 和更新应用程
我正在尝试制作一个包含 MainWindow.cpp 和一个 dialog1.cpp 的程序,我需要将一个字符串从我的对话框的 QLineEdit 传递到 MainWindow.cpp 中的一个函数。
我有一个使用 Qt Designer 制作的 PyQt5 MainWindow。 这个窗口应该抓取网站并在找到后在 TreeView 中列出抓取的链接。 每次抓取新链接时,我都可以创建一个模型 QSt
我理解 Static 和 Instance 的概念,但我很困惑,当我有一个只有 1 个实例的类时,我应该使用哪个实例,这是在我的应用程序开始时调用的实例 (=Application.Current .
我正在尝试将 MainWindow 的 DataContext 设置为其在 App.OnStartup 中的 ViewModel。我注意到这样做时,MainWindow() 构造函数被调用了两次,我看
是否可以将相对于 MainWindow 的点转换为相对于其子控件之一?例如,假设一个控件的左上角位于 500, 500 相对于 MainWindow 什么代码会将该数字转换为 (0, 0)?我希望解决
所以我按照以下网站上的指南来限制文本框可以接受的字符。 http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a
我目前正在使用 QT Creator 创建用于查看的 UI 文件,我是 QT 初学者。 有一部分我很好奇,我如何创建另一个类,比如 GraphicView,以便我可以将信号和槽发送到该类而不是主窗体?
我在 MainWindow.xaml.cs 中有这个: public partial class MainWindow : Window { public double _frameCount
我有用户控件,它有两个控件 标签 和 文本 block 并且在我的 MainWindow 中,我有一个 List
我有一个关于 Scope 的初学者问题。在 MainWindow 类中,我创建了用于数据绑定(bind)的 ModelView 类的实例,以及具有要显示的 Leaves 属性的 Cabbage 类的实
首先,在主窗口中看到这段代码 我创建了一个名为 RightPanel 的用户控件,并将其命名为 MainWindow.xaml rightPanel 例如,在用户
首先,在主窗口中看到这段代码 我创建了一个名为 RightPanel 的用户控件,并将其命名为 MainWindow.xaml rightPanel 例如,在用户
我是一名优秀的程序员,十分优秀!