【Qt开发】QTableWidget设置根据内容调整列宽和行高

QTableWidget要调整表格行宽主要涉及以下一个函数
1.resizeColumnsToContents();                      根据内容调整列宽           
2.resizeColumnToContents(int col);               根据内容自动调整给定列宽
3.horizontalHeader()->setResizeMode           把给定列设置为给定模式
主要模式有Stretch和Fixed

  posted @ 2011-11-29 22:21 ccsdu2009 阅读(486) | 评论 (0) | 编辑 收藏

  QT学习笔记-38.使用QSetting

  QSetting类是QT中专门用于读写程序数据的对象
一个简单的使用例子如下:

  QSettings setting("config.ini",QSettings::IniFormat);
    setting.beginGroup("config");
       setting.setValue("page",QVariant(3));
       setting.setValue("site",QVariant(";));
       setting.setValue("maker",QVariant("Gaimor"));
    setting.endGroup();

这个例子是把数据写到配置文件config.ini中去
当然也可以使用分组的方式写入,具体如下:

  setting.setValue("config/page",QVariant(3));

  setting.setValue("config/site",QVariant(";));

  setting.setValue("config/maker",QVariant("Gaimor"));


它的读写值得函数原型如下:

  void setValue(const QString &key, const QVariant &value);
    QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;


当然QSetting还有其他使用方式,以后慢慢总结

  posted @ 2011-11-29 21:56 ccsdu2009 阅读(250) | 评论 (0) | 编辑 收藏

  QT学习笔记-35:QTableWidget动态增加行的方法

  QTableWidget动态增加行的方法
其实很简单的:
首先rowCount()得到当前中的行数,然后在调用insertRow(row);即可
如果要动态增加列,方法类似

  posted @ 2011-11-27 11:49 ccsdu2009 阅读(355) | 评论 (0) | 编辑 收藏

  QT学习笔记-34.QT中Pro文件的写法

  QT中 .pro文件的写法如下:

  1. 注释
从“#”开始,到这一行结束。

  2. 指定源文件
SOURCES = *.cpp

  对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp
或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:

  SOURCES = hello.cpp \
                  main.cpp
还有一种是这样

  SOURCES+= hello.cpp
    SOURCES +=main.cpp

  这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。

  3. 指定头文件
HEADERS = hello.h或者HEADERS += hello.h

  列出源文件的任何一个方法对头文件也都适用。

  4. 配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。

  CONFIG+= qt warn_on release

  在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。
A$amp;>amp;$nbsp;qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B$amp;>amp;$nbsp;warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C$amp;>amp;$nbsp;release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用debug来替换release

  5. 指定目标文件名
TARGET = filename

  如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称

  6. 添加界面文件(ui)
INTERFACES = filename.ui

  7. 平台相关性处理
我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:

  win32 {
SOURCES += hello_win.cpp
}

  所以如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中。如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。

  8. 如果一个文件不存在,停止qmake
如果某一个文件不存在的 时候,你也许不想生成一个Makefile。我们可以通过使用exists()函数来检查一个文件是否存在。我们可以通过使用error()函数把正在运 行的qmake停下来。这和作用域的工作方式一样。只要很简单地用这个函数来替换作用域条件。对main.cpp文件的检查就像这样:

  !exists( main.cpp ) {
  error( "No main.cpp file found")
}

  “!”用来否定这个测试,比如,如果文件存在,exists( main.cpp)是真,如果文件不存在,!exists( main.cpp )是真。

  9. 检查多于一个的条件
假设你使用Windows并且当你在命令 行运行你的应用程序的时候你想能够看到qDebug()语句。除非你在连编你的程序的时候使用console设置,你不会看到输出。我们可以很容易地把 console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在 Windows下并且当debug已经在CONFIG行中的时候,添加console。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成 另一个。把设置放在最里面的作用域里,就像这样:

  win32 {
  debug {
     CONFIG += console
  }
}

  嵌套的作用域可以使用冒号连接起来,像这样:

  win32:debug {
CONFIG += console
}

  10. 摸板
模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:

  A$amp;>amp;$nbsp;app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
B$amp;>amp;$nbsp;lib - 建立一个库的makefile。
C$amp;>amp;$nbsp;vcapp - 建立一个应用程序的VisualStudio项目文件。
D$amp;>amp;$nbsp;vclib - 建立一个库的VisualStudio项目文件。
E$amp;>amp;$nbsp;subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。

  11. 生成Makefile
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:

  Makefile可以像这样由“.pro”文件生成:

  qmake -oMakefile hello.pro

  对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:

    qmake -tvcapp -o hello.dsp hello.pro

  posted @ 2011-11-26 21:50 ccsdu2009 阅读(152) | 评论 (0) | 编辑 收藏

  QT学习笔记-33.QTableView增加QCheckBox的方法

  使用Delegate具体如下:

  class QLineDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    QLineDelegate(QTableView* tableView);
protected:
    void paint(QPainter* painter,const QStyleOptionViewItem& option,const QModelIndex& index) const;
    bool editorEvent(QEvent *event,
                                         QAbstractItemModel *model,
                                         const QStyleOptionViewItem &option,
                                         const QModelIndex &index) ;
private:
    QPen         pen;
    QTableView*  view;
};


  static QRect CheckBoxRect(const QStyleOptionViewItem &view_item_style_options)
{
    QStyleOptionButton check_box_style_option;
    QRect check_box_rect = QApplication::style()->subElementRect(
        QStyle::SE_CheckBoxIndicator,
        &check_box_style_option);

    QPoint check_box_point(view_item_style_options.rect.x() +
                           view_item_style_options.rect.width() / 2 -
                           check_box_rect.width() / 2,
                           view_item_style_options.rect.y() +
                           view_item_style_options.rect.height() / 2 -
                           check_box_rect.height() / 2);
    return QRect(check_box_point, check_box_rect.size());
}


QLineDelegate::QLineDelegate(QTableView* tableView)
{
    int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
    QColor gridColor = static_cast<QRgb>(gridHint);
    pen = QPen(gridColor,0,tableView->gridStyle());
    view = tableView;
}

void QLineDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,const QModelIndex& index)const
{
    bool checked = index.model()->data(index, Qt::DisplayRole).toBool();

    if(index.column() == 0)
    {
        QStyleOptionButton check_box_style_option;
        check_box_style_option.state |= QStyle::State_Enabled;
        if(checked)
        {
            check_box_style_option.state |= QStyle::State_On;
        }
        else
        {
            check_box_style_option.state |= QStyle::State_Off;
        }
        check_box_style_option.rect = CheckBoxRect(option);
        QApplication::style()->drawControl(QStyle::CE_CheckBox,&check_box_style_option,painter);
    }

    QStyledItemDelegate::paint(painter,option,index);
    QStyleOptionViewItem itemOption(option);
    if(itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter,itemOption,index);
    QPen oldPen = painter->pen();
    painter->setPen(pen);
    painter->drawLine(option.rect.topRight(),option.rect.bottomRight());
    painter->drawLine(itemOption.rect.bottomLeft(),itemOption.rect.bottomRight());
    painter->setPen(oldPen);
}

bool QLineDelegate::editorEvent(QEvent *event,
                                   QAbstractItemModel *model,
                                   const QStyleOptionViewItem &option,
                                   const QModelIndex &index) {
    if((event->type() == QEvent::MouseButtonRelease) ||
        (event->type() == QEvent::MouseButtonDblClick))
    {
        QMouseEvent *mouse_event = static_cast<QMouseEvent*>(event);
        if(mouse_event->button() != Qt::LeftButton ||
           !CheckBoxRect(option).contains(mouse_event->pos()))
        {
            return false;
        }

        if(event->type() == QEvent::MouseButtonDblClick)
        {
            return true;
        }
    }
    else if(event->type() == QEvent::KeyPress)
    {
        if(static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space &&
           static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select)
        {
            return false;
        }
    }
    else
    {
        return false;
    }

    bool checked = index.model()->data(index, Qt::DisplayRole).toBool();
    return model->setData(index, !checked, Qt::EditRole);
}

不过有一个小问题,就是CheckBox旁边有false/true字符

  posted @ 2011-11-26 12:33 ccsdu2009 阅读(461) | 评论 (0) | 编辑 收藏

  QT学习笔记-32.QTableWidget增加QCheckBox的方法

  #include <QtGui>

class ItemDelegate : public QItemDelegate
{
public:
    ItemDelegate(QObject *parent = 0)
        : QItemDelegate(parent)
    {
    }
    virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option,
        const QRect &, Qt::CheckState state)const
    {
        const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;

        QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
            check(option, option.rect, Qt::Checked).size(),
            QRect(option.rect.x() + textMargin, option.rect.y(),
            option.rect.width() - (textMargin * 2), option.rect.height()));
        QItemDelegate::drawCheck(painter, option, checkRect, state);
    }
    virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
        const QModelIndex &index)
    {
        Q_ASSERT(event);
        Q_ASSERT(model);

        Qt::ItemFlags flags = model->flags(index);
        if(!(flags & Qt::ItemIsUserCheckable) || !(flags & Qt::ItemIsEnabled))
            return false;

        QVariant value = index.data(Qt::CheckStateRole);
        if(!value.isValid())
            return false;

        if(event->type() == QEvent::MouseButtonRelease)
        {
            const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
            QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
                check(option, option.rect, Qt::Checked).size(),
                QRect(option.rect.x() + textMargin, option.rect.y(),
                option.rect.width() - (2 * textMargin), option.rect.height()));
            if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
                return false;
        }
        else if(event->type() == QEvent::KeyPress)
        {
            if(static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space
                && static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select)
                return false;
        }
        else
        {
            return false;
        }
        Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
              Qt::Unchecked : Qt::Checked);

        //! 15x20

        return model->setData(index, state, Qt::CheckStateRole);
    }
    void drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const
    {
        QItemDelegate::drawFocus(painter, option, option.rect);
    }
};

static int ROWS = 3;
static int COLS = 3;

class Table : public QTableWidget
{
public:
    Table(QWidget *parent = 0)
        : QTableWidget(ROWS, COLS, parent)
    {
        setItemDelegate(new ItemDelegate(this));
        QTableWidgetItem *item = 0;
        for(int i=0; i<rowCount(); ++i)
        {
            for(int j=0; j<columnCount(); ++j)
            {
                setItem(i, j, item = new QTableWidgetItem);
                QTableViewItem;
                item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsUserCheckable);
                item->setCheckState((i+j) % 2 == 0   Qt::Checked : Qt::Unchecked);
            }
        }
    }
};

int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    Table w;
    w.show();
    return a.exec();
}

  posted @ 2011-11-26 11:25 ccsdu2009 阅读(264) | 评论 (0) | 编辑 收藏

  QT学习笔记-31.QTableView只显示横格,不显示点击虚框的方法

  重新风格项代理QStyledItemDelegat

  class QLineDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    QLineDelegate(QTableView* tableView);
protected:
    void paint(QPainter* painter,const QStyleOptionViewItem& option,const QModelIndex& index) const;
private:
    QPen         pen;
    QTableView*  view;
};


  #include <QPainter>
#include "QLineDelegate.h"

QLineDelegate::QLineDelegate(QTableView* tableView)
{
    int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
    QColor gridColor = static_cast<QRgb>(gridHint);
    pen = QPen(gridColor, 0, tableView->gridStyle());
    view = tableView;
}

void QLineDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,const QModelIndex& index)const
{
    QStyleOptionViewItem itemOption(option);
    if(itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter,itemOption,index);
    QPen oldPen = painter->pen();
    painter->setPen(pen);
    //painter->drawLine(option.rect.topRight(),option.rect.bottomRight());
    painter->drawLine(itemOption.rect.bottomLeft(),itemOption.rect.bottomRight());
    painter->setPen(oldPen);
}

  posted @ 2011-11-25 20:22 ccsdu2009 阅读(228) | 评论 (0) | 编辑 收藏

  QT学习笔记-30.QTableView只显示横格的方式

  默认QTableView是显示网状格子的,如果不显示网格则可以调用setShowGrid(false);来实现。但是如果只想显示横线则有点复杂了。具体代码如下:

  #include <QApplication>

  #include <QTableWidget>

  #include <QPainter>

  #include <QStyledItemDelegate>

  #include <QHeaderView>

  class QLineDelegate : public QStyledItemDelegate

  {

  public:

  QLineDelegate(QTableView* tableView);

  protected:

  void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;

  private:

  QPen pen;

  QTableView* view;

  };

  QLineDelegate::QLineDelegate(QTableView* tableView)

  {

  int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());

  QColor gridColor = static_cast<QRgb>(gridHint);

  pen = QPen(gridColor, 0, tableView->gridStyle());

  view = tableView;

  }

  void QLineDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,const QModelIndex& index)const

  {

  QStyledItemDelegate::paint(painter, option, index);

  QPen oldPen = painter->pen();

  painter->setPen(pen);

  //painter->drawLine(option.rect.topRight(), option.rect.bottomRight());

  painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());

  painter->setPen(oldPen);

  }

  class QLineTableWidget:public QTableWidget

  {

  public:

  QLineTableWidget();

  };

  QLineTableWidget::QLineTableWidget()

  {

  setStyleSheet("QTableView::Item{selection-background-color:#101020}");

  setStyleSheet("QTableView::Item{background-color:#F0F0F0}");

  verticalHeader()->setVisible(false);

  horizontalHeader()->setVisible(true);

  setSelectionBehavior(QAbstractItemView::SelectRows);

  setSelectionMode(QAbstractItemView::SingleSelection);

  setEditTriggers(QTableView::NoEditTriggers);

  setColumnCount(3);

  setRowCount(4);

  setShowGrid(false);

  setItemDelegate(new QLineDelegate(this));

  setCurrentCell(-1,-1);

  }

  int main(int argc,char **argv)

  {

  QApplication a(argc,argv);

  QLineTableWidget widget;

  widget.show();

  return a.exec();

  }

  posted @ 2011-11-22 22:23 ccsdu2009 阅读(1253) | 评论 (0) | 编辑 收藏

  QT学习笔记-30.自写的QT插件系统

  #ifndef QPLUGIN_SYSTEM_H
#define QPLUGIN_SYSTEM_H
#include <QObject>
#include <QVector>
#include <QPluginLoader>
#include <QDir>

template<class T>
class QPluginSystem
{
public:
    void setup();
    int  getAddonCnt(){return addons.size();}
    T*   getAddonByIndex(int index){return addons.at(index);}    
private:
    QVector<QPluginLoader*$amp;>amp;$nbsp;loaders;
    QVector<T*$amp;>amp;$nbsp;            addons;
};

template<class T>
void QPluginSystem<T>::setup()
{
    QString path = QDir::currentPath();
    path += QDir::separator();
    path += "addons";
    QDir pluginsDir(path);

    foreach(QString fileName,pluginsDir.entryList(QDir::Files))
    {   
        bool autodel = false;
        QPluginLoader* pluginLoader = new QPluginLoader(pluginsDir.absoluteFilePath(fileName));
        QObject *plugin = pluginLoader->instance();
        if(plugin)
        {
            T *interface = qobject_cast<T*>(plugin);
            if(interface)
            {
                addons.push_back(interface);
                loaders.push_back(pluginLoader);
                autodel = true;
            }
        }

        if(autodel == false)
            delete pluginLoader;
    }
}

#endif
其中T是插件对象,需要继承QObject
另外虽然我没试过,但是我感觉增加QPluginLoader链表是很有必要的

  posted @ 2011-11-17 22:11 ccsdu2009 阅读(121) | 评论 (0) | 编辑 收藏

  QT学习笔记-29.使用QT HTTP下载网络文件

QT附带的例子比较好:

  class HttpWindow : public QDialog
{
    Q_OBJECT
public:
    HttpWindow(QWidget *parent = 0);

    void startRequest(QUrl url);
private slots:
    void downloadFile();
    void cancelDownload();
    void httpFinished();
    void httpReadyRead();
    void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes);
    void enableDownloadButton();
    void slotAuthenticationRequired(QNetworkReply*,QAuthenticator *);
private:
    QLabel *statusLabel;
    QLabel *urlLabel;
    QLineEdit *urlLineEdit;
    QProgressDialog *progressDialog;
    QPushButton *downloadButton;
    QPushButton *quitButton;
    QDialogButtonBox *buttonBox;

    QUrl url;
    QNetworkAccessManager qnam;
    QNetworkReply *reply;
    QFile *file;
    int httpGetId;
    bool httpRequestAborted;
};

其中槽有:
1.开始下载
2.取消下载
3.预备下载
4.下载完成
5.进度回调


实现为:

  void HttpWindow::startRequest(QUrl url)
{
    reply = qnam.get(QNetworkRequest(url));
    connect(reply, SIGNAL(finished()),
            this, SLOT(httpFinished()));
    connect(reply, SIGNAL(readyRead()),
            this, SLOT(httpReadyRead()));
    connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
            this, SLOT(updateDataReadProgress(qint64,qint64)));
}

该函数主要针对给定url绑定事件

  void HttpWindow::downloadFile()
{
    url = urlLineEdit->text();

    QFileInfo fileInfo(url.path());
    QString fileName = fileInfo.fileName();
    fileName = "downloadfile.dat";
    if(fileName.isEmpty())
        fileName = "index.html";

    if(QFile::exists(fileName)) {
        if (QMessageBox::question(this, tr("HTTP"), 
                                  tr("There already exists a file called %1 in "
                                     "the current directory. Overwrite ").arg(fileName),
                                  QMessageBox::Yes|QMessageBox::No, QMessageBox::No)
            == QMessageBox::No)
            return;
        QFile::remove(fileName);
    }

    file = new QFile(fileName);
    if (!file->open(QIODevice::WriteOnly)) {
        QMessageBox::information(this, tr("HTTP"),
                                 tr("Unable to save the file %1: %2.")
                                 .arg(fileName).arg(file->errorString()));
        delete file;
        file = 0;
        return;
    }

    progressDialog->setWindowTitle(tr("HTTP"));
    progressDialog->setLabelText(tr("Downloading %1.").arg(fileName));
    downloadButton->setEnabled(false);

    // schedule the request
    httpRequestAborted = false;
    startRequest(url);
}

当点击下载的时候,会执行该函数
获取url链接,生成本地文件,...

  void HttpWindow::cancelDownload()
{
    statusLabel->setText(tr("Download canceled."));
    httpRequestAborted = true;
    reply->abort();
    downloadButton->setEnabled(true);
}

终止下载,主要函数是reply->abort();

  void HttpWindow::httpFinished()
{
    if (httpRequestAborted) {
        if (file) {
            file->close();
            file->remove();
            delete file;
            file = 0;
        }
        reply->deleteLater();
        progressDialog->hide();
        return;
    }

    progressDialog->hide();
    file->flush();
    file->close();


    QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    if (reply->error()) {
        file->remove();
        QMessageBox::information(this, tr("HTTP"),
                                 tr("Download failed: %1.")
                                 .arg(reply->errorString()));
        downloadButton->setEnabled(true);
    } else if (!redirectionTarget.isNull()) {        
        QUrl newUrl = url.resolved(redirectionTarget.toUrl());
        if (QMessageBox::question(this, tr("HTTP"),
                                  tr("Redirect to %1  ").arg(newUrl.toString()),
                                  QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
            url = newUrl;
            reply->deleteLater();
            file->open(QIODevice::WriteOnly);
            file->resize(0);
            startRequest(url);
            return;
        }
    } else {
        QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName();
        statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName));
        downloadButton->setEnabled(true);
    }

    reply->deleteLater();
    reply = 0;
    delete file;
    file = 0;
}

  下载结束动作

  void HttpWindow::httpReadyRead()
{
    // this slot gets called every time the QNetworkReply has new data.
    // We read all of its new data and write it into the file.
    // That way we use less RAM than when reading it at the finished()
    // signal of the QNetworkReply
    if (file)
        file->write(reply->readAll());
}

写文件回调

  void HttpWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
    if (httpRequestAborted)
        return;

    progressDialog->setMaximum(totalBytes);
    progressDialog->setValue(bytesRead);
}

转载于:https://www.cnblogs.com/huty/p/8518171.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...

深入浅出MySQL数据库开发、优化与管理维护 内容介绍&#xff1a;本书从数据库的基础、开发、优化、管理维护4个方面对MySQL进行了详细的介绍&#xff0c;其中每一部分都独立成篇。本书内容实用&#xff0c;覆盖广泛&#xff0c;讲解由浅入深&#xff0c;适合于各个层次的读者。…

Understand Lambda Expressions in 3 minutes(翻译)

本文翻译自CodeProject上的一篇简单解释Lambda表达式的文章&#xff0c;适合新手理解。译文后面我补充了一点对Lambda表达式的说明。 1.什么是Lambda表达式&#xff1f; Lambda表达式是一种匿名方法&#xff0c;多数情况下用来在LINQ中快速创建委托。简单地说&#xff0c;它代表…

Hibernate二级缓存配置

一、定义&#xff1a; 二级缓存是进程或集群范围内的缓存&#xff0c;可以被所有的Session共享&#xff0c;是可配置的插件 二、二级缓存原理图 解析&#xff1a;每次从二级缓存中取出的对象&#xff0c;都是一个新的对象。 三、配置步骤如下&#xff1a; 同理&#xff1a;以员…

redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用

Redis哨兵(Sentinel)其实本质就是一个RedisServer节点&#xff0c;通过设置 运行模式 来开启哨兵的功能&#xff1b;主要功能如下&#xff1a;监控(Monitoring )&#xff1a;哨兵节点会不断地检查的主服务和从服务的运行状态&#xff1b;自动故障迁移(Automatic failover) &…

闰秒导致MySQL服务器的CPU sys过高

今天&#xff0c;有个哥们碰到一个问题&#xff0c;他有一个从库&#xff0c;只要是启动MySQL&#xff0c;CPU使用率就非常高&#xff0c;其中sys占比也比较高&#xff0c;具体可见下图。 注意&#xff1a;他的生产环境是物理机&#xff0c;单个CPU&#xff0c;4个Core。 于是&…

新安装数据库sqlserver2008r2,使用javaweb连接不上问题处理

鼠标右键【计算机】--》【管理】&#xff0c;打开界面如下&#xff1a; 选择自己数据库的实例名&#xff1a; 选择TCP/IP&#xff1a;右键【属性】&#xff0c;将所有TCP动态端口的【0】删掉&#xff0c;TCP端口设为1433&#xff1b;重启服务&#xff0c;即可连接。PS:不知道这…

vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...

大家好&#xff0c;我们今日继续讲解VBA代码解决方案的第115讲内容&#xff1a;工作表事件中&#xff0c;根据Target参数不同&#xff0c;实现精准控制触发事件的VBA代码第二方案。在上一讲中我们讲了利用Address的属性实现控制触发事件的方案&#xff0c;今日讲解第二方案&…

(翻译)31天Windows Phone学习-1-项目模板

今天在在外文网站Google关于Windows Phone 7的学习资料&#xff0c;无疑间Google到了Jeff Blankenburg的 31 Days of Windows Phone这个系列&#xff0c;感觉写的比较基础和浅显易懂&#xff0c;适合我这种入们级的人学习&#xff0c;所以准备拿来对Windows Phone 7的简单入门学…

MOSS点滴(2):自定义Application Page

在MOSS中后台管理的页面都是Application Page&#xff0c;比如网站设置的页面(settings.aspx)就是典型的Application Page&#xff0c;它不能被Sharepoint Desiger定制。如果我们要修改只能手动的使用其他工具来修改&#xff0c;我们也可以添加Application Page&#xff0c;必须…

wpf使用webbrowser时提示当前页面脚本发生错误_win7系统internet脚本错误的应对办法...

最近有win7系统用户反馈&#xff0c;上网时遇到ie浏览器总会提示internet脚本错误的问题&#xff0c;不知如何解决&#xff0c;为此非常苦恼&#xff0c;那么win7系统提示internet脚本错误怎么办呢?就此问题&#xff0c;下面小编教你win7系统internet脚本错误的应对办法。有不…

JDK的目录结构及结构图

-bin目录: JDK开发工具的可执行文件 -lib目录: 开发工具使用的归档包文件 -jre: Java 运行时环境的根目录&#xff0c;包含Java虚拟机&#xff0c;运行时的类包和Java应用启动器&#xff0c; 但不包含开发环境中的开发工具 -demo: 含有源代码的程序示例 -include: 包含…

Cacti 使用安装详解-企业级实例

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。Cacti是通过 snmpget来获取数据&#xff0c;使用 RRDtool绘画图形&#xff0c;它提供了非常强大的数据和用户管理功能&#xff0c;可以指定每一个用户能查看树状结构、host以及任何一张图&#xff0c;还…

linux教程:配置Tomcat开机启动

我们在linux下安装好tomcat之后&#xff1b;经常是需要配置到开机启动的&#xff1b; 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在centos7中完成的&#xff1b;也在centos6.5中测试过&#xff1b;理论上所有版本…

操作系统内存分配算法_操作系统基础45-伙伴系统和slab内存分配

当在用户模式下运行进程请求额外内存时&#xff0c;从内核维护的空闲页帧列表上分配页面。这个列表通常使用页面置换算法来填充&#xff0c;如前所述&#xff0c;它很可能包含散布在物理内存中的空闲页面。也要记住&#xff0c;如果用户进程请求单个字节内存&#xff0c;那么就…

Sublime Text 3新建工程

1. 创建工程 Project > Add Folder to Project 这时在sidebar中将出现刚刚添加的文件目录&#xff0c;如果还需要添加其他目录&#xff0c;则重复这一操作即可。 2. 保存工程 Project > Save Project As 点击保存后Sublime Text将自动生成两个文件&#xff1a; 如图&…

445端口 mysql_关于如何关闭window端口445的详细介绍

首先&#xff0c;来查看下系统当前都开放了什么端口&#xff0c;怎样查看呢&#xff1f;调出cmd命令行程序&#xff0c;输入命令”netstat -na“&#xff0c;可以看到。接着&#xff0c;可以发现当前系统开放了135、445以及5357端口&#xff0c;而且从状态看都处于监听状态”Li…

输入圆的半径,计算并输出圆的周长和面积

转载于:https://www.cnblogs.com/nicebaby/p/5866320.html

Mac下运行git报错xcrun: error: invalid active developer path ..

错误&#xff1a;xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 如图&#xff1a; 解决方法&#xff1a; 终端输入&#xff1a; xcode-select --install 之后点击…

CodeForces 15B Laser

题目链接&#xff1a;http://codeforces.com/problemset/problem/15/B题意&#xff1a;给出n*m的一块巧克力&#xff0c;再给出两个点&#xff0c;两点只能同时移动&#xff0c;两点所占位置巧克力会融化&#xff0c;问所有能走位置走遍之后还剩下几块巧克力。思路&#xff1a;…

datetime-时间日期模块

import datetime例1&#xff1a;把nginx的日志格式转化为易懂的格式time 10/Aug/2016:03:20:09 0800a datetime.datetime.strptime(time,%d/%b/%Y:%H:%M:%S %z)a.strftime(%Y%m%d%H%m)转载于:https://blog.51cto.com/liuzhengwei521/1892274