我想添加一个右键菜单来删除,重命名或打开QTAbleView单元格中每个单元格中的图像,我试过,发现每个人都试图将菜单添加到tableview中的标题,我试过下面但是看起来似乎不在下面的代码中工作..
class GalleryUi(QtGui.QTableView):
""" Class contains the methods that forms the
UI of Image galery
"""
def __init__(self, imagesPathLst=None, parent=None):
super(GalleryUi, self).__init__(parent)
self.__sw = QtGui.QDesktopWidget().screenGeometry(self).width()
self.__sh = QtGui.QDesktopWidget().screenGeometry(self).height()
self.__animRate = 1200
self._imagesPathLst = imagesPathLst
self._thumb_width = 200
self._thumb_height = self._thumb_width + 20
self.setUpWindow(initiate=True)
self._startControlBar()
self._connections()
def contextMenuEvent(self, event):
index = self.indexAt(event.pos())
menu = QtGui.QMenu()
renameAction = QtGui.QAction('Exit', self)
renameAction.triggered.connect(self.close)
self.menu.addAction(renameAction)
self.menu.popup(QtGui.QCursor.pos())
def closeEvent(self,event):
# in case gallery is launched by Slideshow this is not needed
if hasattr(self, 'bar'):
self.bar.close()
def …Run Code Online (Sandbox Code Playgroud) 我有一个问题,下面的行self.tableView.set??????????(df)应该在PyQt5中显示数据帧.我放 ???那里我错过了我需要的代码.
def btn_clk(self):
path = self.lineEdit.text()
df = pd.read_csv(path)
self.tableView.set??????????(df)
Run Code Online (Sandbox Code Playgroud)
其余的代码可以工作,因为如果我print(df)在上面的代码中使用,数据框就会在IPython控制台中打印出来.所以,Pandas读取CSV并打印出来.
但是,我尝试了很多东西让它在PyQt5中显示出来并且没有任何效果.我对PyQt不太熟悉,刚刚开始玩它而且我被困在这里.
这是我的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(662, 512)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout.addWidget(self.lineEdit)
self.tableView = QtWidgets.QTableView(self.centralwidget)
self.tableView.setObjectName("tableView")
self.verticalLayout.addWidget(self.tableView)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.horizontalLayout.addLayout(self.verticalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 662, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow) …Run Code Online (Sandbox Code Playgroud) 我用QSqlTableModel创建了一个QTableView.按标准,双击单元格将标记它们,用户可以编辑它们.我想,不允许用户这样做.允许他通过单击单个单元格来标记整行,但不能编辑单元格.我怎样才能做到这一点?
我正试图在特定单元格上进入编辑模式,如下所示:
void MainWindow::on_addButton_released() {
tm->addRow();
tableView->scrollToBottom();
int ec=tm->firstWritableColumn();
int r=tm->rowCount(QModelIndex());
QModelIndex id = tm->index(r, ec, QModelIndex());
tableView->setCurrentIndex(id);
tableView->edit(id);
qDebug() << "row:" << r << " col:" << ec << "index:" << id;
}
Run Code Online (Sandbox Code Playgroud)
我的模型创建了一个这样的索引:
QModelIndex TableModel::index(int row,int column,QModelIndex parent) const {
Q_UNUSED(parent);
return createIndex(row,column,0);
}
Run Code Online (Sandbox Code Playgroud)
调试输出如下所示:
row: 9 col: 1 index: QModelIndex(9,1,0x0,TableModel(0xbf3f50) )
Run Code Online (Sandbox Code Playgroud)
我很确定索引在某种程度上是无效的,因为setCurrentIndex()它似乎不起作用.
我有一个3000行8列的表.我使用QTableView.要插入我做的项目:
QStandardItem* vSItem = new QStandardItem();
vSItem->setText("Blabla");
mModel->setItem(row, column, vSItem);
Run Code Online (Sandbox Code Playgroud)
其中mModel是QStandardItemModel.如果我没有很多行,一切都很好,但是当我想要显示大数据(大约3000行)时,它非常慢(在Win 7 64位上有20秒(8核的机器有8 GB RAM! !!)).我能做些什么来提高性能吗?
提前致谢.
我一直在努力解决这个问题,我似乎无法找到正确的方法.
我想要的是能够使用动画图标作为我的一些项目的装饰(通常表明该特定项目正在进行一些处理).我有一个自定义表模型,我在一个显示QTableView.
我的第一个想法是创建一个自定义委托,负责显示动画.当传递a QMovie作为装饰角色时,代表将连接到QMovie每个新框架可用时更新显示(参见下面的代码).但是,在调用委托paint方法后,画家似乎仍然无效(调用画家save方法时出错,可能是因为指针不再指向有效内存).
另一种解决方案是dataChanged每当新帧可用时发出项目的信号,但1)会产生许多不必要的开销,因为数据没有真正改变; 2)在模型级别处理电影似乎并不干净:显示层(QTableView或代理人)应负责处理新帧的显示.
有没有人知道在Qt视图中显示动画的干净(并且最好是高效)方式?
对于那些感兴趣的人,这里是我开发的代表的代码(目前不起作用).
// Class that paints movie frames every time they change, using the painter
// and style options provided
class MoviePainter : public QObject
{
Q_OBJECT
public: // member functions
MoviePainter( QMovie * movie,
QPainter * painter,
const QStyleOptionViewItem & option );
public slots:
void paint( ) const;
private: // member variables
QMovie * movie_;
QPainter * painter_;
QStyleOptionViewItem option_; …Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些看起来应该非常简单的事情,但是我越是调查它,我想知道它是否是一个Qt错误.
所以,我有一个QTableView可以按用户喜欢显示/隐藏的列.在我初始化表之后,我调用了一个自定义restoreColumns()方法,该方法隐藏QTableView::hideColumn()了用户在上次打开GUI时隐藏的列(使用).
当用户尝试显示上次运行GUI时用户隐藏的列时,就会出现问题.调用适当的信号/插槽并运行但由于某种原因QTableView未更新以显示列.
奇怪的是,任何已经显示的列(上次运行GUI时用户都没有隐藏)都没有隐藏/显示的问题.
有什么想法吗?谢谢!
这是我如何初始化表...
m_tableModel = new mytablemodel();
m_tableView = new mytableview();
m_tableView->setItemDelegate(m_tableDelegate);
m_tableView->setModel(m_tableModel);
Run Code Online (Sandbox Code Playgroud)
restoreColumns()方法的肉:
for (int i=0; i<horizontalHeader()->count(); i++) {
// load size to restore previous width
...
horizontalHeader()->resizeSection(i, width); // restore width
// load previous column position
...
// restore column order
int currentVisualIndex = horizontalHeader()->visualIndex(i);
if (currentVisualIndex != visualIndex)
horizontalHeader()->moveSection(currentVisualIndex, visualIndex);
// load previous hidden/shown state
...
if (columnHidden) {
hideColumn(i);
} else {
showColumn(i);
}
} …Run Code Online (Sandbox Code Playgroud) 我正在使用QTableView来显示从中检索的数据 QtSql.QSqlQuery
我想知道如何在excel中为它创建过滤器.

在上面的图像中,我需要获取所有heders的过滤器(Sh_Code,SH_Seq,Stage)过滤器将具有我们可以过滤的那一列中的唯一值.
要求的结果
我需要Table视图标题,其中包含一个列表框,列出该列中的所有唯一值,就像下面的excel一样.无需Top,Standard过滤器......如图所示.只需要"全部"和独特的"列项"

这是来自我的.NET应用程序,上传时更加清晰

我想知道如何通过拖动改变QtableView中列的顺序?我目前有一个派生自FilterProxyModel的类作为QtableView的源代码.我使用的是QT 4.8
我正在制作一个字典程序,在3列子QTableView类中显示单词定义,当用户键入它们时,从QAbstractTableModel子类中获取数据.像这样的东西:
我想在文本中添加各种格式,我用来在数据进入时向每个单元格QAbstractItemView::setIndexWidget添加一个QLabel:
WordView.h
#include <QTableView>
class QLabel;
class WordView : public QTableView {
Q_OBJECT
public:
explicit WordView(QWidget *parent = 0);
void rowsInserted(const QModelIndex &parent, int start, int end);
private:
void insertLabels(int row);
void removeLabels(int row);
};
Run Code Online (Sandbox Code Playgroud)
WordView.cpp
#include <QLabel>
#include "WordView.h"
WordView::WordView(QWidget *parent) :
QTableView(parent)
{}
void WordView::rowsInserted(const QModelIndex &parent, int start, int end) {
QTableView::rowsInserted(parent, start, end);
for (int row = start; row <= end; ++row) {
insertLabels(row);
}
}
void …Run Code Online (Sandbox Code Playgroud) qtableview ×10
qt ×8
c++ ×4
pyqt ×3
python ×2
qt4 ×2
contextmenu ×1
pandas ×1
pyqt4 ×1
pyqt5 ×1
python-2.7 ×1
qmodelindex ×1
qt5 ×1